P2760 科技莊園-動態規劃,揹包
阿新 • • 發佈:2018-12-10
Life種了一塊田,裡面種了有一些桃樹。
Life對PFT說:“我給你一定的時間去摘桃,你必須在規定的時間之內回到我面前,否則你摘的桃都要歸我吃!”
PFT思考了一會,最終答應了!
由於PFT的數學不好!它並不知道怎樣才能在規定的時間獲得最大的價值,
由於PFT不是機器人,所以他的體力並不是無限的,他不想摘很多的桃以至體力為0,而白白把桃給Life。同時PFT每次只能摘一棵桃樹,,每棵桃樹都可以摘K次(對於同一棵桃每次摘的桃數相同)。每次摘完後都要返回出發點(PFT一次拿不了很多)即Life的所在地(0,0){試驗田左上角的桃座標是(1,1)}。
PFT每秒只能移動一個單位,每移動一個單位耗費體力1(摘取不花費時間和體力,但只限上下左右移動)
#include <iostream> #include <cstdio> using namespace std; int n,m,t,tl; int a[1101][1101],b[1101][1101]; int w[1110001],v[1100001],f[11001]; int num=0; int main() { cin>>n>>m>>t>>tl; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>b[i][j]; if(a[i][j]>0){ for(int k=1;k<=b[i][j];k++){ w[++num]=2*(i+j); v[num]=a[i][j]; } } } } t=min(tl-1,t); f[0]=0; for(int i=1;i<=num;i++){ for(int j=t;j>=w[i];j--){ if(j-w[i]<0) break; else f[j]=max(f[j],f[j-w[i]]+v[i]); } } cout<<f[t]; return 0; }