洛谷 P1759 通天之潛水

2022-05-03 11:30:16 字數 1603 閱讀 8558

題目提供者lych

標籤動態規劃洛谷原創

難度普及/提高-

提交該題 討論

題解記錄

直達通天路·小a歷險記第三篇在猴王的幫助下,小a終於走出了這篇荒山,卻發現一條波濤洶湧的河攔在了自己的面前。河面上並沒有船,但好在小a有n個潛水工具。由於他還要背重重的揹包,所以他只能背m重的工具,又因為他的力氣並不是無限的,河卻很寬,所以他只能背有v阻力的工具。但是這條河下有非常重要的資料,所以他希望能夠停留的時間最久。於是他找到了你,讓你告訴他方案。

輸入格式:

三個數m,v,n如題目所說

接下來n行,每行三個數ai,bi,ci分別表示所含的重力,阻力,能夠支撐的時間

輸出格式:

第一行乙個數,表示最長的時間

接下來一行,若干個數,表示所選的物品

輸入樣例#1:

100 100 3

50 60 289

40 10 116

50 50 106

輸出樣例#1:

405 

1 2

1<=m,v<=200,n<=100

資料保證一定有方案。

若有多種方案,輸出前面盡量小的方案。

60分**:

#include#include

using

namespace

std;

#define n 1001

intn,m,q,ans[n];

intv[n],g[n],c[n];

intf[n][n];

intmain()

else

if(tmp>f[j][k]) f[j][k]=tmp;}}

}printf(

"%d\n

",f[n][m]);

for(int i=1;i<=ans[0];i++) printf("

%d "

,ans[i]);

return0;

}

題解:

」最長的時間「的dp轉移

f[j][k]=max(f[j][k],f[j-v[i]][k-g[i]]+c[i]);
f[j][k]表示在j重力k阻力的情況下的最長時間

難點在於輸出所選的物品

這樣,維護乙個len,記錄選了幾個物品;

ac**:

#include#include

using

namespace

std;

#define n 201

intn,m,q,ans[n];

intv[n],g[n],c[n];

struct

node f[n][n];

intmain()}}

}printf(

"%d\n

",f[n][m].w);

for(int i=1;i<=f[n][m].len;i++) printf("

%d "

,f[n][m].a[i]);

return0;

}

洛谷 P1759 通天之潛水

直達通天路 小a歷險記第三篇 在猴王的幫助下,小a終於走出了這篇荒山,卻發現一條波濤洶湧的河攔在了自己的面前。河面上並沒有船,但好在小a有n個潛水工具。由於他還要背重重的揹包,所以他只能背m重的工具,又因為他的力氣並不是無限的,河卻很寬,所以他只能背有v阻力的工具。但是這條河下有非常重要的資料,所以...

揹包變形 P1759 通天之潛水

傳送 這道題就是二維揹包加輸出具體方案,二維就可以直接在一維揹包上多加一維,迴圈的時候多套一層就ok了。至於記錄方案我們可以發現,每一種狀態都是由上一種狀態轉移過來的。我們用 ans 表示狀態,則有 ans j k ans j a i k b i char i 最後輸出 ans m v 即可。所以 ...

洛谷 P1760 通天之漢諾塔

直達通天路 小a歷險記第四篇 在你的幫助下,小a成功收集到了寶貴的資料,他終於來到了傳說中連線通天路的通天山。但是這距離通天路仍然有一段距離,但是小a突然發現他沒有地圖!但是幸運的是,他在山腳下發現了乙個寶箱。根據經驗判斷 小a有經驗嗎?地圖應該就在其中!在寶箱上,有三根柱子以及在一根柱子上的n個圓...