• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            The Fourth Dimension Space

            枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            浙大月賽 3264 DP

            如果一開始我也用兩個dp數組就好了,但是我錯誤地認為如果從后往前掃描數組的話是不會出現相互影響的情況的,事實上我錯了,原來數據里有重量為0的數據,如果有一對寶藏他們有兩種取法(如第二種情況)而這兩件寶物的重量又恰好為0,那么用 dp[j]=dp[j-w]+v[i] 這個狀態轉移方程相當于兩件寶物都取了,這違背了題意,除了這一種情況之外,其他的情況都可以直接用上面的轉移方程式(所以說這個題真的很猥瑣,但也體現出我對背包問題掌握的不全面)。
            當我知道了這個陷阱后,我極力的想證明只有都是0的情況才不能用上面的方法,所以我只開了一個dp數組,事實上證明我是正確的!這個題糾結了較長時間,雖然能比當場做出來的同學想的更清晰,但是總是現場卡題也不是個好現象,有則改之吧。

            #include<iostream>
            using namespace std;
            #define max(a,b) (a>b?a:b)
            #define MAX 10001
            struct node
            {
                
            int w1,v1,w2,v2,flag;
            }
            l[MAX];

            int dp[50001];

            int main()
            {

                
            int bagw;
                
            int n;
                
            int i,j;
                
            while(scanf("%d%d",&bagw,&n)!=EOF)
                
            {
                    bagw
            /=100;
                    memset(dp,
            0,sizeof(dp));
                    
            for(i=1;i<=n;i++)
                    
            {

                        scanf(
            "%d%d%d%d%d",&l[i].w1,&l[i].v1,&l[i].w2,&l[i].v2,&l[i].flag);
                        l[i].w1
            /=100;
                        l[i].w2
            /=100;
                    }

                    
            for(i=1;i<=n;i++)
                    
            {

                        
            for(j=bagw;j>=0;j--)
                        
            {
                            
            int temp=dp[j];

                            
            if(l[i].flag==1)
                            
            {
                                
            int pos=j-l[i].w1-l[i].w2;
                                
            if(pos>=0)
                                dp[j]
            =max(dp[j],dp[pos]+l[i].v1+l[i].v2);
                            }

                            
            if(l[i].flag==2)
                            
            {
                                
            int pos=j-l[i].w1;
                                
            if(pos>=0)
                                
            {
                                    
            if(max(dp[j],dp[pos]+l[i].v1)>temp)
                                    
            {

                                        temp
            =max(dp[j],dp[pos]+l[i].v1);
                                    }

                                }


                                pos
            =j-l[i].w2;
                                
            if(pos>=0)
                                
            {
                                    
            if(max(dp[j],dp[pos]+l[i].v2)>temp)
                                        temp
            =max(dp[j],dp[pos]+l[i].v2);
                                }

                                dp[j]
            =temp;

                            }

                            
            if(l[i].flag==3)
                            
            {
                                
            int pos=j-l[i].w1;
                                
            if(pos>=0)
                                
            {
                                    
            if(max(dp[j],dp[pos]+l[i].v1)>temp) 
                                    
            {
                                        temp
            =max(dp[j],dp[pos]+l[i].v1);
                                    }

                                }


                                
                                pos
            =j-l[i].w1-l[i].w2;
                                
            if(pos>=0)
                                
            {
                                    
            if(max(dp[j],dp[pos]+l[i].v1+l[i].v2)>temp)
                                    
            {

                                        temp
            =max(dp[j],dp[pos]+l[i].v1+l[i].v2);
                                    }

                                }

                                dp[j]
            =temp;
                            }

                        }


                    }


                    
            int res=0;
                    
            for(i=1;i<=bagw;i++)
                    
            {

                        
            if(res<dp[i])
                            res
            =dp[i];
                    }

                    printf(
            "%d\n",res);

                    
                }

                
            return 0;
            }








            topcoder SRM 又快到了,希望自己能正常發揮,不過這次是DIV 1了,希望題目不要太難 ,呵呵 加油啦 ^_^ 

            posted on 2009-11-17 01:39 abilitytao 閱讀(1547) 評論(5)  編輯 收藏 引用

            評論

            # re: 浙大月賽 3264 DP 2009-11-18 09:01 tp

            最好把題目一起發出來,,,
              回復  更多評論   

            # re: 浙大月賽 3264 DP 2009-11-18 16:30 Best

            學習了,頂個。。。。  回復  更多評論   

            # re: 浙大月賽 3264 DP 2009-11-18 22:18 littletom

            難怪我用
            f[j]=max(f[j],f[j-w1]+v1);
            f[j]=max(f[j],f[j-w2]+v2);
            就WA

            int tp = f[j];
            tp=max(tp,f[j-w1]+v1);
            tp=max(tp,f[j-w2]+v2);
            f[j]=tp;
            就AC了
            強 !!你是怎么知道數據中有0這組的,太強大了!我就沒有想到,只是覺得自己發現了問題,可是沒有繼續追尋啊!!學習。。。。  回復  更多評論   

            # re: 浙大月賽 3264 DP 2009-11-19 12:32 swcai

            還是兩維dp數組比較好,壓根就沒想到這個事情。做這些題目給我一個印象就是不要管細節的執行效率和內存使用效率,能跑,AC就行那  回復  更多評論   

            # re: 浙大月賽 3264 DP 2009-11-22 14:29 夢芭莎內衣

            圣誕節快放假看電視  回復  更多評論   

            久久人人爽人人爽AV片| 青青国产成人久久91网| 久久夜色精品国产| 中文字幕精品久久久久人妻| 亚洲精品tv久久久久久久久久| 久久久久黑人强伦姧人妻| 亚洲精品97久久中文字幕无码| 欧美日韩精品久久免费| 久久精品国产亚洲精品2020| 国产精品成人99久久久久| 久久亚洲AV成人无码软件| 国产精品一久久香蕉产线看 | 久久影视综合亚洲| 日本强好片久久久久久AAA| 亚洲成色999久久网站| 亚洲午夜无码久久久久| 久久综合九色欧美综合狠狠| 国产精品美女久久久久| 久久久久无码中| 日本三级久久网| 久久精品国产亚洲AV无码偷窥| 日韩美女18网站久久精品| 一本伊大人香蕉久久网手机| 久久无码人妻一区二区三区午夜 | 国产∨亚洲V天堂无码久久久| 午夜精品久久久久久影视777| 亚洲国产精品久久久久久| 久久棈精品久久久久久噜噜| 精品伊人久久久| 午夜精品久久久久久影视777| 国产综合免费精品久久久| 99999久久久久久亚洲| 无码日韩人妻精品久久蜜桃| 久久久久青草线蕉综合超碰| 人人狠狠综合久久亚洲高清| 久久久久久久亚洲精品| 久久本道久久综合伊人| 免费一级欧美大片久久网| 久久精品国产99久久香蕉| 久久精品国产色蜜蜜麻豆| 久久最新免费视频|