日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ZOJ - 2972 Hurdles of 110m(记忆化搜索/动态规划)

發(fā)布時(shí)間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZOJ - 2972 Hurdles of 110m(记忆化搜索/动态规划) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:點(diǎn)擊查看

題目大意:給定n個(gè)點(diǎn),以及m的最大體力值,共有三個(gè)狀態(tài)通過(guò)每個(gè)點(diǎn)

  • 快速模式:消耗時(shí)間t1,消耗體力f1
  • 勻速模式:消耗時(shí)間t2
  • 慢速模式:消耗時(shí)間t3,恢復(fù)體力f2
  • 問(wèn):通過(guò)n個(gè)點(diǎn)后所使用的最少時(shí)間。

    這個(gè)題目的題意簡(jiǎn)潔明了,轉(zhuǎn)移方程也很容易寫(xiě)出:

    dp初始化為inf,dp[0][m]=0;

    dp[i][j]=min(dp[i-1][j-f1]+t1,dp[i-1][j]+t2,dp[i-1][j+f2]+t3);

    共有兩種方式可以實(shí)現(xiàn),即從前往后的遞推,和從后往前的記憶化搜索

    記憶化搜索更簡(jiǎn)單,但時(shí)間復(fù)雜度比遞推高了幾個(gè)常數(shù)等級(jí)

    相對(duì)的遞推雖然復(fù)雜一點(diǎn),但時(shí)間復(fù)雜度低

    但在此題目無(wú)影響,都是0ms通過(guò),上代碼:

    遞推:

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<stack> #include<queue> #include<map> #include<sstream> #include<cmath> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=150;int f1[N],f2[N],t1[N],t2[N],t3[N];int dp[N][N];int n,m;int main() { // freopen("input.txt","r",stdin);int w;cin>>w;while(w--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d%d%d%d%d",t1+i,t2+i,t3+i,f1+i,f2+i);memset(dp,inf,sizeof(dp));dp[0][m]=0;for(int i=1;i<=n;i++)for(int j=0;j<=m;j++){if(j>=f1[i])dp[i][j-f1[i]]=min(dp[i-1][j]+t1[i],dp[i][j-f1[i]]);dp[i][j]=min(dp[i-1][j]+t2[i],dp[i][j]);if(j+f2[i]<m)dp[i][j+f2[i]]=min(dp[i][j+f2[i]],dp[i-1][j]+t3[i]);elsedp[i][m]=min(dp[i][m],dp[i-1][j]+t3[i]);}int mmin=inf;for(int i=0;i<=m;i++)mmin=min(mmin,dp[n][i]);cout<<mmin<<endl;}return 0; }

    記憶化搜索:

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<stack> #include<queue> #include<map> #include<sstream> #include<cmath> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=150;int f1[N],f2[N],t1[N],t2[N],t3[N];int dp[N][N];int n,m;int dfs(int t,int f) {if(t==1){if(f>=f1[1])return min(t1[1],min(t2[1],t3[1]));elsereturn min(t2[1],t3[1]);}if(dp[t][f]!=inf)return dp[t][f];if(f>=f1[t])dp[t][f]=min(dp[t][f],dfs(t-1,f-f1[t])+t1[t]);dp[t][f]=min(dp[t][f],dfs(t-1,f)+t2[t]);dp[t][f]=min(dp[t][f],dfs(t-1,min(f+f2[t],m))+t3[t]);return dp[t][f]; }int main() { // freopen("input.txt","r",stdin);int w;cin>>w;while(w--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d%d%d%d%d",t1+i,t2+i,t3+i,f1+i,f2+i);memset(dp,inf,sizeof(dp));dp[0][m]=0;cout<<dfs(n,m)<<endl;}return 0; }

    ?

    總結(jié)

    以上是生活随笔為你收集整理的ZOJ - 2972 Hurdles of 110m(记忆化搜索/动态规划)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。