#include<stdio.h>
#include<string.h>
int main()
{
int n,c,p[50],w[50],m[50][500],dp[500];
//参数输入
printf("请物品的个数和背包的总重量:");
scanf("%d%d",&n,&c);
for(int
i=1;i<=n;i++)
{
printf("输入w%d
p%d:",i,i);
scanf("%d%d",&w[i],&p[i]);
}
//递推
//初始化的操作
//注:如数组没有初始化 则其值是随机的
for(int j=0;j<=c;j++)
{
if(j>=w[n]) m[n][j]=p[n];
else m[n][j]=0;
}
//使用递推关系
for(int i=n-1;i>=1;i--)
for(int j=0;j<=c;j++)
{
if(j>=w[i]&&m[i+1][j-w[i]]+p[i]>m[i+1][j])
m[i][j]=m[i+1][j-w[i]]+p[i];
else
m[i][j]=m[i+1][j];
}
printf("最大值:%d\n",m[1][c]);
return
0;
}
#include<stdio.h>
#include<string.h>
int
main()
{
int n,c,p[50],w[50],m[50][500],dp[500];
//参数输入
printf("请物品的个数和背包的总重量:");
scanf("%d%d",&n,&c);
for(int
i=1;i<=n;i++)
{
printf("输入w%d
p%d:",i,i);
scanf("%d%d",&w[i],&p[i]);
}
//顺推
//初始化
for(int j=0;j<=c;j++)
{
if(j>=w[1]) m[1][j]=p[1];
else m[1][j]=0;
}
//利用递推关系
for(int i=2;i<=n;i++)
for (int j=0;j<=c;j++)
{
if(j>=w[i]&&m[i-1][j]<m[i-1][j-w[i]]+p[i])
m[i][j]=m[i-1][j-w[i]]+p[i];
else
m[i][j]=m[i-1][j];
}
pritf("%d",m[n][c])
return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using
namespace std;
int n,c,p[50],w[50],m[50][500],dp[500];
int
main()
{
//参数输入
printf("请物品的个数和背包的总重量:");
scanf("%d%d",&n,&c);
for(int
i=1;i<=n;i++)
{
printf("输入w%d
p%d:",i,i);
scanf("%d%d",&w[i],&p[i]);
}
memset(m,0,sizeof(m));
for(int i=1;i<=n;i++)
for(int j=c;j>=w[i];j--)
m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+p[i]);
printf("%d",m[n][c]);
return
0;
}
for i=1......N
for v=V......0
dp[v]=max{dp[v],dp[v-c[i]]+w[i]}
for i=1......N
for v=V......0
if(v>=c[i]) dp[v]=max(dp[v],dp[v-c[i]]+w[i]);
else dp[v]=dp[v];
for i=1.........N
for v=V......c[i]
dp[v]=dp[v]>dp[v-c[i]]+w[i]?dp[v]:dp[v-c[i]]+w[i];
原文:http://www.cnblogs.com/longgongshiye/p/3526634.html