• <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 夢芭莎內衣

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

            亚洲午夜久久久影院伊人| 国产激情久久久久影院小草 | 精品国产一区二区三区久久蜜臀| 99久久国产综合精品女同图片| 久久午夜福利电影| 久久免费国产精品一区二区| 浪潮AV色综合久久天堂| 久久天天躁狠狠躁夜夜96流白浆 | 三级韩国一区久久二区综合 | 日韩亚洲欧美久久久www综合网| 看久久久久久a级毛片| 久久久久亚洲AV无码永不| 久久婷婷五月综合97色| 狠色狠色狠狠色综合久久| 伊人久久大香线蕉影院95| 狠狠人妻久久久久久综合蜜桃 | 俺来也俺去啦久久综合网| 亚洲伊人久久大香线蕉综合图片| 久久青青草原精品国产| 久久综合丁香激情久久| 久久久久国产一级毛片高清板| 亚洲欧美日韩精品久久亚洲区 | 手机看片久久高清国产日韩 | 亚洲人成伊人成综合网久久久| 亚洲综合精品香蕉久久网| 久久福利青草精品资源站| 久久激情亚洲精品无码?V| 久久99热这里只有精品66| 久久Av无码精品人妻系列 | 久久国产香蕉一区精品| 久久精品人人做人人爽电影| 97久久精品无码一区二区| 国产精品内射久久久久欢欢| 思思久久99热只有频精品66| 99精品久久精品一区二区| 理论片午午伦夜理片久久 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 97久久精品无码一区二区| 人妻无码久久精品| 蜜桃麻豆www久久| 日产精品99久久久久久|