亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

100道動態規劃——26 UVA 12099 The Bookcase 狀態的定義,遞推,背包

2019-11-14 10:58:55
字體:
來源:轉載
供稿:網友

        好題!這個題給我帶來了很多思考

        本來就不是很會做,看看了紫書才明白做法,這里權當自己復習一遍好了

        首先給所有書規定一個順序,把書按照書的高度由大到小排序,默認排序后第一本書放在第一層

        定義狀態dp[i][j][k]代表目前準備放第i+1本書,第二層的厚度為j,第三層的厚度為k時,第二層+第三層高度的最小值

        于是就有3種狀態的轉移:

            ①把書放在第一層,dp[i+1][j][k]=dp[i][j][k]

            ②把書放在第二層,dp[i+1][j+book[i+1].second][k]=dp[i][j][k]+(j==0?book[i+1].first:0);j為0代表第二層沒有放書,因此要+上高度,.first代表高度,.second代表寬度

            ③把書放在第三層,類似。dp[i+1][j][k+book[i+1].second]=dp[i][j][k]+(k==0?book[i+1].first:0)

        這是一個背包問題

        我似乎對于“背包”的理解有點狹隘了

        我似乎還沒有理解動態規劃更抽象的東西

        本想說說感想,卻啥也說不出來了

        以下是原版本:

#include <iostream>#include <cstring>#include <algorithm>using namespace std;using pa=pair<int,int>;int times,n,dp[75][2105][2105],thick[75],ans=0x3f3f3f3f;pa book[75];inline void update(int& newstate,int k){    if(newstate<0||newstate>k)        newstate=k;}int main(){    ios_base::sync_with_stdio(false);    cin>>times;    while(times--){        cin>>n;        for(int i=0;i<n;++i)            cin>>book[i].first>>book[i].second;        sort(book,book+n,[](const pa& a,const pa& b){return a.first>b.first||a.first==b.first&&a.second>b.second;});        memset(dp,-1,sizeof dp);        thick[0]=book[0].second;        for(int i=1;i<n;++i)            thick[i]=thick[i-1]+book[i].second;        dp[0][0][0]=0;        for(int i=0;i<n-1;++i)        for(int j=0;j<=thick[i+1]-thick[0];++j)        for(int k=0;k<=thick[i+1]-thick[0]-j;++k)        if(dp[i][j][k]>=0){            update(dp[i+1][j][k],dp[i][j][k]);            update(dp[i+1][j+book[i+1].second][k],dp[i][j][k]+(j==0?book[i+1].first:0));            update(dp[i+1][j][k+book[i+1].second],dp[i][j][k]+(k==0?book[i+1].first:0));        }        for(int i=1;i<=thick[n-1]-thick[0];++i)        for(int j=1;j<=thick[n-1]-thick[0]-i;++j)        if(dp[n-1][i][j]>=0)            ans=min(ans,max(max(j,i),thick[n-1]-i-j)*(book[0].first+dp[n-1][i][j]));        cout<<ans<<endl;        ans=0x3f3f3f3f;    }    return 0;}

        以下是滾動數組的版本:

#include <iostream>#include <cstring>#include <algorithm>using namespace std;using pa=pair<int,int>;int times,n,dp[2][2105][2105],t,thick[75],ans=0x3f3f3f3f;pa book[75];inline void update(int& newstate,int k){    if(newstate<0||newstate>k)        newstate=k;}int main(){    ios_base::sync_with_stdio(false);    cin>>times;    while(times--){        cin>>n;        for(int i=0;i<n;++i)            cin>>book[i].first>>book[i].second;        sort(book,book+n,[](const pa& a,const pa& b){return a.first>b.first||a.first==b.first&&a.second>b.second;});        thick[0]=book[0].second;        for(int i=1;i<n;++i)            thick[i]=thick[i-1]+book[i].second;        dp[t][0][0]=0;        for(int i=0;i<n-1;++i){            //memset(dp[t^1],-1,sizeof dp[t^1]);            t^=1;            for(int j=0;j<=thick[i+1];++j)            for(int k=0;k<=thick[i+1]-j;++k)                dp[t][j][k]=-1;            t^=1;            for(int j=0;j<=thick[i]-thick[0];++j)            for(int k=0;k<=thick[i]-thick[0]-j;++k)            if(dp[t][j][k]>=0){                update(dp[t^1][j][k],dp[t][j][k]);                update(dp[t^1][j+book[i+1].second][k],dp[t][j][k]+(j==0?book[i+1].first:0));                update(dp[t^1][j][k+book[i+1].second],dp[t][j][k]+(k==0?book[i+1].first:0));            }            t^=1;        }        for(int i=1;i<=thick[n-1]-thick[0];++i)        for(int j=1;j<=thick[n-1]-thick[0]-i;++j)        if(dp[t][i][j]>=0)            ans=min(ans,max(max(j,i),thick[n-1]-i-j)*(book[0].first+dp[t][i][j]));        cout<<ans<<endl;        ans=0x3f3f3f3f;    }    return 0;}

        想一想在做最原始的背包問題的時候空間的優化,n個物品,容量為v的背包,空間復雜度從n*v→2*v→v,而且那個是單向更新,因此我斷言這個滾動數組也可以省略掉,只不過這里是二維的情況,倘若省略掉的話,我本身也不想每一次循環都走一遍thick[n-1],我還要做數組越界的判定,有點麻煩,還是算了吧。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69精品小视频| 久久精品国产清自在天天线| 另类专区欧美制服同性| 国产精品最新在线观看| 国产精品扒开腿做爽爽爽的视频| 精品福利在线视频| 欧美成人免费全部| 69**夜色精品国产69乱| 日韩精品在线电影| 青青草国产精品一区二区| 国产精品亚洲аv天堂网| 2018中文字幕一区二区三区| 国产综合福利在线| 欧美影院在线播放| 欧美高清在线播放| 777精品视频| 欧美激情视频免费观看| 亚洲精品视频网上网址在线观看| 亚洲人成网在线播放| 91在线精品视频| 国产精品美女呻吟| 亚洲国产免费av| 亚洲精品有码在线| 日本精品一区二区三区在线| 懂色av影视一区二区三区| 日韩精品久久久久| 久久人人爽人人爽人人片亚洲| 久久久久在线观看| 欧美老女人性视频| 欧美在线视频在线播放完整版免费观看| 中文字幕日韩专区| 日韩欧美有码在线| 国产日韩在线免费| 亚洲老头同性xxxxx| 91免费在线视频网站| 欧美成人免费观看| 亚洲精品欧美日韩| 国产日韩换脸av一区在线观看| 亚洲全黄一级网站| 国产精品视频久久| 欧美激情一区二区三区高清视频| 欧美电影《睫毛膏》| 欧美激情亚洲精品| 性亚洲最疯狂xxxx高清| 日韩在线观看免费高清完整版| 96sao精品视频在线观看| 国产成人精品免高潮在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲肉体裸体xxxx137| 国产精品久久网| 91久久久久久国产精品| 亚洲成人黄色网| 欧美精品亚州精品| 亚洲福利视频免费观看| 欧美激情xxxx| 中文字幕少妇一区二区三区| 亚洲一区二区三区乱码aⅴ蜜桃女| 日韩中文字幕在线免费观看| 国产成人亚洲综合91| 亚洲免费视频在线观看| 欧美极品少妇与黑人| 久久久久久69| 在线精品91av| 日韩成人久久久| 555www成人网| 91网站在线免费观看| 亚洲字幕在线观看| 欧美日韩国产在线播放| 555www成人网| 91精品中国老女人| 日韩电影在线观看中文字幕| 亚洲一区二区三区四区视频| 最近2019中文字幕一页二页| 91夜夜揉人人捏人人添红杏| 18一19gay欧美视频网站| 色哟哟网站入口亚洲精品| 97在线看免费观看视频在线观看| 日韩中文字在线| 亚洲一区二区三区成人在线视频精品| 播播国产欧美激情| 色视频www在线播放国产成人| 91免费福利视频| 精品亚洲一区二区三区在线观看| 成人免费激情视频| 亚洲精品wwwww| 欧美精品久久久久久久免费观看| 一区二区国产精品视频| 久久精品人人做人人爽| 一个人看的www欧美| 日韩精品在线免费播放| 亚洲国产精品yw在线观看| 狠狠操狠狠色综合网| 久久亚洲精品网站| 亚洲毛片在线看| 午夜精品久久久久久久99黑人| 成人免费在线视频网址| 亚洲精品国产精品国产自| 国产69精品99久久久久久宅男| 91福利视频在线观看| 欧美国产日韩一区二区三区| 久久久精品视频成人| www国产亚洲精品久久网站| 欧美超级乱淫片喷水| 国产激情久久久| 亚洲成人精品视频在线观看| 日韩av电影在线网| 久久精品夜夜夜夜夜久久| 97色在线播放视频| 色七七影院综合| 91免费看视频.| 久久天堂电影网| 日韩动漫免费观看电视剧高清| 久久久噜久噜久久综合| 成人免费自拍视频| 日韩三级影视基地| 日韩电影免费在线观看中文字幕| 日韩av在线直播| 国产婷婷成人久久av免费高清| 岛国视频午夜一区免费在线观看| 精品女同一区二区三区在线播放| 91情侣偷在线精品国产| 日韩精品高清在线| 欧美床上激情在线观看| 疯狂蹂躏欧美一区二区精品| 亚洲第一级黄色片| 国产精品视频公开费视频| 亚洲欧美日韩中文在线| 日韩欧美视频一区二区三区| 中文字幕在线亚洲| 亚洲一区久久久| 亚洲国产精品一区二区久| 国产美女直播视频一区| 国产精品综合久久久| 在线观看国产欧美| 色先锋久久影院av| 久久精品这里热有精品| 中文字幕日韩欧美在线视频| 日韩在线中文字幕| 中文字幕在线精品| 欧美激情亚洲综合一区| 国产69精品久久久久9999| 日韩在线观看免费av| 91精品国产色综合久久不卡98| 亚洲欧美三级伦理| 欧美日韩国产中文字幕| 亚洲高清在线观看| 日韩美女福利视频| 国产在线久久久| 精品久久久久久国产91| 一二美女精品欧洲| 亚洲女人天堂色在线7777| 欧美一级成年大片在线观看| 欧美一级淫片丝袜脚交| 亚洲精品美女久久久久| 91国内在线视频| 国产精品中文在线| 国模精品视频一区二区| 亚洲国产精品字幕| 久久精品亚洲一区| 97久久超碰福利国产精品…| 少妇高潮久久久久久潘金莲| 欧美在线视频一二三| 成人久久久久爱| 国内精品免费午夜毛片|