hdu 2602 01背包

来源:互联网 发布:电脑网络有时有有时没 编辑:程序博客网 时间:2024/05/21 19:35

题目链接:传送门

参考博客:点击打开链接

能理解递推关系式但对代码不是很理解。。

#include<iostream>#include<cstring>#define maxn 1005using namespace std;int dp[maxn][maxn],a[maxn],v[maxn];   int main(){int i,j,t,n,vn;    while(cin>>t)    {        while(t--)        {            memset(dp,0,sizeof(dp));            cin>>n>>vn;            for(i=1;i<=n;i++)                cin>>a[i];            for(j=1;j<=n;j++)                cin>>v[j];            for(i=1;i<=n;i++)            {                for(j=0;j<=vn;j++)                {                    if(j>=v[i])dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+a[i]);                    else  dp[i][j]=dp[i-1][j];                }            }            cout<<dp[n][vn]<<endl;        }    }}
空间优化后的
#include<iostream>#include<cstring>#define maxn 1005using namespace std;int dp[maxn],a[maxn],v[maxn];int main(){int i,j,t,n,vn;    while(cin>>t)    {        while(t--)        {            memset(dp,0,sizeof(dp));            cin>>n>>vn;            for(i=1;i<=n;i++)                cin>>a[i];            for(j=1;j<=n;j++)                cin>>v[j];            for(i=1;i<=n;i++)                  for(j=vn;j>=v[i];j--)            dp[j]=max(dp[j],dp[j-v[i]]+a[i]);            cout<<dp[vn]<<endl;        }    }}



原创粉丝点击