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

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

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

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

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

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

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

        定義狀態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
俺去了亚洲欧美日韩| 亚洲综合日韩在线| 91国内产香蕉| 欧美大胆a视频| 国产一区二区三区在线视频| 欧美日韩亚洲天堂| 国产亚洲一级高清| 国产精品尤物福利片在线观看| 国产成人精品电影| 欧美日本高清一区| 不卡毛片在线看| 午夜精品理论片| 国产综合色香蕉精品| 国语自产精品视频在线看抢先版图片| 久久久久久美女| 欧美色xxxx| 亚洲黄页网在线观看| 精品久久久久久久久久久久久| 久久久亚洲国产天美传媒修理工| 日韩av电影在线网| 91精品国产综合久久香蕉| 亚洲欧美综合区自拍另类| 精品人伦一区二区三区蜜桃免费| 不卡av在线播放| 欧美成人精品三级在线观看| 日韩av在线免费看| 欧美久久久精品| 日韩av中文字幕在线| 日韩成人在线免费观看| 久久久国产精品免费| 国产精品视频一区二区三区四| 伊人男人综合视频网| 亚洲无线码在线一区观看| 国产精品一区二区三区毛片淫片| 午夜精品久久久久久99热| 国产精彩精品视频| 亚洲人午夜精品免费| 欧美亚洲在线播放| 国产精品永久免费观看| 91禁国产网站| 青青草一区二区| 国产精品入口免费视| 日本亚洲欧美三级| 一区二区三区视频免费| 欧美日韩成人免费| 中文字幕亚洲自拍| 国产精品影片在线观看| 国产97色在线|日韩| 美女精品视频一区| 91精品久久久久久综合乱菊| 日韩免费av片在线观看| 欧美大片大片在线播放| 91精品久久久久久久| 欧美久久精品一级黑人c片| 欧美激情亚洲精品| 中文字幕欧美精品日韩中文字幕| 青青草精品毛片| 成人午夜激情网| 欧美电影电视剧在线观看| 欧美成人免费大片| 色悠悠国产精品| 91精品国产91久久久久| 亚洲japanese制服美女| 久热在线中文字幕色999舞| 一区二区三区 在线观看视| 日韩电影中文字幕在线| 欧美激情高清视频| 亚洲人成欧美中文字幕| 亚洲欧洲日产国产网站| 欧美小视频在线| 亚洲一区二区三区在线免费观看| 国产裸体写真av一区二区| 久久夜精品va视频免费观看| 国产99视频在线观看| 色悠久久久久综合先锋影音下载| 国产一区二中文字幕在线看| 国产成人aa精品一区在线播放| 欧美裸身视频免费观看| 亚洲国产精品99久久| 国产精品视频免费在线观看| 伊人男人综合视频网| 秋霞午夜一区二区| 午夜精品蜜臀一区二区三区免费| 欧美日韩第一视频| 精品久久久久久久久久ntr影视| 精品久久久久久久久久ntr影视| 欧美午夜精品久久久久久人妖| 91国内产香蕉| 国内精品久久久久影院 日本资源| 欧洲成人性视频| 欧美性生交大片免网| 欧美性xxxxx极品娇小| 国产精品av在线播放| 亚洲欧美中文另类| 亚洲黄色有码视频| 亚洲第一页在线| 欧美巨乳美女视频| 91精品国产自产在线观看永久| 国产精品视频最多的网站| 亚洲女人天堂网| 欧美性生交大片免网| 成人黄在线观看| 日韩激情在线视频| 国产精品高潮呻吟久久av无限| 成人天堂噜噜噜| 91极品女神在线| 久久精品成人一区二区三区| 91精品国产成人www| 国产精品wwwwww| 久久99视频精品| 中文字幕亚洲无线码在线一区| 国产精品久久久久久搜索| 国产伦精品免费视频| 91九色蝌蚪国产| 一区二区三区四区视频| 亚洲精品一区二区三区婷婷月| 亚洲精品国产综合区久久久久久久| 欧美黑人巨大精品一区二区| 91视频国产精品| 亚洲乱码一区av黑人高潮| 国产精品无av码在线观看| 欧美激情一区二区三级高清视频| 亚洲一区999| 国产精品入口日韩视频大尺度| 亚洲国产三级网| 久久影视电视剧凤归四时歌| 欧美激情视频播放| 57pao成人国产永久免费| 美女撒尿一区二区三区| 欧美肥臀大乳一区二区免费视频| 久久91精品国产| 久久久国产在线视频| 日韩经典一区二区三区| 精品五月天久久| 日韩欧美主播在线| 2024亚洲男人天堂| 精品福利在线视频| 欧美天天综合色影久久精品| 国产精品日韩欧美| 午夜精品久久久久久久99热浪潮| 岛国av一区二区在线在线观看| 亚洲成人精品久久久| 亚洲人成电影网站| 69av成年福利视频| 亚洲精品视频中文字幕| 亚洲欧洲第一视频| 成人xvideos免费视频| 日韩hd视频在线观看| 国产精品流白浆视频| 一本大道亚洲视频| 中文国产亚洲喷潮| 亚洲视频综合网| 亚洲福利在线观看| 热久久这里只有精品| 亚洲精品成人久久电影| 久久久黄色av| 国产精品亚洲欧美导航| 亚洲视频第一页| 欧美激情精品久久久| 亚洲国产精品电影在线观看| 国产69精品久久久久9999| 亚洲黄色www| 一区二区三区回区在观看免费视频| 亚洲国产私拍精品国模在线观看|