OJ题目 : click here ~~
题意分析:01背包
AC_CODE
int n;
int v[1002] , money;
int dp[1002];
int main()
{
while(cin >> n && n)
{
int i , j , a, sum = 0;
for(i = 1;i <= n;i++)
{
scanf("%d",&v[i]);
}
scanf("%d",&money);
if(money < 5)
{
cout << money << endl;
continue;
}
memset(dp , 0 , sizeof(dp));
sort(v + 1 , v + 1 + n);
for(i = 1;i < n;i++)
for(j = (money - 5);j >= v[i];j--)
dp[j] = max(dp[j] , dp[j - v[i]] + v[i]);
cout << money - v[n] - dp[money - 5] << endl;
}
return 0;
}