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

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

            97久久精品无码一区二区| 亚洲国产精品无码久久一线| 国产农村妇女毛片精品久久| 99久久亚洲综合精品网站| 亚洲综合久久久| 亚洲精品国产美女久久久| 国产69精品久久久久9999| 囯产精品久久久久久久久蜜桃 | 亚洲精品无码久久一线| 久久99国产精品二区不卡| 久久人做人爽一区二区三区 | 亚洲精品乱码久久久久久中文字幕 | 99久久综合狠狠综合久久| 一本色道久久综合狠狠躁| 国产精品成人99久久久久91gav| 99久久国产综合精品女同图片| 99久久精品免费国产大片| 久久久久久夜精品精品免费啦| 久久精品国产99久久香蕉| 国产精品久久午夜夜伦鲁鲁| 伊人久久综合无码成人网| 国产精品久久毛片完整版| 青青草原精品99久久精品66| 色婷婷噜噜久久国产精品12p| 国产日产久久高清欧美一区| 久久国产乱子伦免费精品| 久久精品综合网| 精品欧美一区二区三区久久久| 中文字幕无码久久久| 日韩十八禁一区二区久久| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 国产∨亚洲V天堂无码久久久| 国产精品99久久久久久宅男小说| 国内精品久久久久国产盗摄| 国产福利电影一区二区三区久久久久成人精品综合 | 国产精品久久久久久久人人看| 丁香五月综合久久激情| 久久综合伊人77777| 伊人久久大香线蕉综合网站| 一本综合久久国产二区| 国产欧美久久久精品影院|