标签:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Min(a,b) a<b?a:b
const int N=10003;
int dp[N];
int weight[102];
int value[102];
int main()
{
int n,w;
while(scanf("%d%d",&n,&w)==2)
{
int sum=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&weight[i],&value[i]);
sum+=value[i]; //sum保存所有的价值之和
}
memset(dp,0x3f3f,sizeof(dp)); //初始化数组要为无穷大,因为是要找最小值,所以默认无穷大
dp[0]=0;
for(int i=0;i<n;i++)
{
for(int j=sum;j>=value[i];j--)
dp[j]=Min(dp[j],dp[j-value[i]]+weight[i]);
}
for(int i=sum;i>=0;i--)
if(dp[i]<=w)
{
printf("%d\n",i);
break;
}
}
}
标签:
原文地址:http://www.cnblogs.com/mycapple-zgs-111411/p/4619492.html