P7381题解
_ouhsnaijgnat_ · · 题解
一道动规题,我第一次一遍过绿题。
思路
我们定义一个数组
那么
那么状态转移方程是什么呢?
那么为什么呢?
由于我们已经加过这个
说了这么多,上代码!
代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n,m,k,p[505],b[505],dp[505][505];
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
cin>>p[i];
for(int i=0;i<=m;i++)
cin>>b[i];
for(int i=1;i<=n;i++){
for(int j=0;j<=k;j++){
for(int kk=0;kk<=j;kk++){
dp[i][j]=max(dp[i-1][kk]+b[p[i]+j-kk],dp[i][j]);
}
}
}
cout<<dp[n][k];//毋庸置疑,dp[n][k]肯定是最优方案
return 0;
}