我是看别人的博客明白的。。讲解的很好。。他的博客链接下:http://www.cublog.cn/u2/62281/showart_488401.html
0/1背包问题动态规划详解 :
#include <stdio.h>
#define max 100
int a[max][max];
int p[max],w[max];
int m,n;
int dp()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
a[i][j]=0;
}
for(i=1;i<=n;i++)
{
scanf("%d%d",&w[i],&p[i]);
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(w[i]<=j)
{
if(a[i-1][j]>a[i-1][j-p[i]]+w[i])
{
a[i][j]=a[i-1][j];
}
else
a[i][j]=a[i-1][j-w[i]]+p[i];
}
else
a[i][j]=a[i-1][j];
}
return a[n][m];
}
int main()
{
scanf("%d%d",&m,&n);
int b=dp();
printf("%d",b);
return 0;
}