考え
はい、それは私です、私は水のバックパックに来ている~~~~~~エスケープ
私の他のブログの記事を参照してください:[バレー]ロスハーブ
状态转移方程为:
DP [i] [j]はDP [I-1]〜[J](J <W [I])=
DPを[I] [J] =最大{DP [I-1] [j]は、 DP [I-1] [JW [I] + V [I] * W [I]}(j≥w[i])と
その後、わずかに変更されたテーマ(3分)でコードを入れて、あなたはこの質問をオーバーウォーターことができます。
コード
//经典背包,无需解释
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int T,M,w[26],v[26],dp[26][30001];
int main()
{
//初始化
for(int i=1;i<=M;i++)
{
dp[i][0]=0;
}
for(int i=1;i<=T;i++)
{
dp[0][i]=0;
}
//读入
scanf("%d%d",&T,&M);
for(int i=1;i<=M;i++)
{
scanf("%d%d",&w[i],&v[i]);
}
//装叉走起
for(int i=1;i<=M;i++)
{
for(int j=1;j<=T;j++)
{
if(j<w[i])
{
dp[i][j]=dp[i-1][j];
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+w[i]*v[i]);
}
}
}
//输出
printf("%d",dp[M][T]);
return 0;
}
ます。https://www.cnblogs.com/gongdakai/p/11031465.htmlで再現