題目提供者lych
標籤動態規劃洛谷原創
難度普及/提高-
提交該題 討論
題解記錄
直達通天路·小a歷險記第三篇在猴王的幫助下,小a終於走出了這篇荒山,卻發現一條波濤洶湧的河攔在了自己的面前。河面上並沒有船,但好在小a有n個潛水工具。由於他還要背重重的揹包,所以他只能背m重的工具,又因為他的力氣並不是無限的,河卻很寬,所以他只能背有v阻力的工具。但是這條河下有非常重要的資料,所以他希望能夠停留的時間最久。於是他找到了你,讓你告訴他方案。
輸入格式:
三個數m,v,n如題目所說
接下來n行,每行三個數ai,bi,ci分別表示所含的重力,阻力,能夠支撐的時間
輸出格式:
第一行乙個數,表示最長的時間
接下來一行,若干個數,表示所選的物品
輸入樣例#1:
100 100 350 60 289
40 10 116
50 50 106
輸出樣例#1:
4051 2
1<=m,v<=200,n<=100
資料保證一定有方案。
若有多種方案,輸出前面盡量小的方案。
60分**:
#include#includeusing
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#includeusing
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個圓...