• <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 閱讀(1555) 評論(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 夢芭莎內衣

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

            丁香五月综合久久激情| 精品久久8x国产免费观看| 亚洲精品tv久久久久| 色8激情欧美成人久久综合电| 91久久成人免费| 久久婷婷五月综合97色直播| 香蕉99久久国产综合精品宅男自| 模特私拍国产精品久久| 亚洲国产另类久久久精品黑人| 国内精品人妻无码久久久影院 | 99热成人精品热久久669| 久久久久久免费一区二区三区| 一级做a爰片久久毛片16| 久久免费看黄a级毛片| 国产国产成人精品久久| 麻豆精品久久久久久久99蜜桃| 99久久国语露脸精品国产| 久久伊人色| 国产精品成人精品久久久| 色综合久久久久久久久五月| 性高湖久久久久久久久AAAAA| 久久精品麻豆日日躁夜夜躁| 久久久人妻精品无码一区| 久久国产精品免费| 91久久精品视频| 久久99热这里只频精品6| 日韩欧美亚洲综合久久影院d3| 精品国产日韩久久亚洲| 亚洲国产成人久久精品影视| 久久精品人人做人人爽电影蜜月| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久电影网| 青草影院天堂男人久久| 性欧美大战久久久久久久久| 亚洲精品无码专区久久同性男| 久久国产精品一区| 欧美久久综合性欧美| 久久国产精品久久国产精品| 久久久av波多野一区二区| 无码人妻久久一区二区三区| 久久亚洲精品无码AV红樱桃|