感受,这个题用时两年多我才做出来,,自己太笨了,还是最近学了背包,自己在处理一小细节时还是不够啊,
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
#include<stack>
#include<math.h>
#include<string>
#include<stdlib.h>
#include<list>
#include<vector>
using namespace std;
#define N 1051
int dp[N];
int cai[N];
int n;
int p;
int main()
{
int i,j,k;
while (cin>>n)
{
if (n==0)
break;
for (i=0;i<n;i++)
{
cin>>cai[i];
}
cin>>p;
if (p<5)
{
cout<<p<<endl;
continue;
}
memset(dp,0,sizeof(dp));
sort(cai,cai+n);
for (i=0;i<n-1;i++)
{
/*
for (j=p+49;j>p-5;j--)
{
if (j>=cai[i]&&j-cai[i]<=p-5)
dp[j]=max(dp[j],dp[j-cai[i]]+cai[i]);
}
*/
for (j=p-5;j>=cai[i];j--)
{
dp[j]=max(dp[j],dp[j-cai[i]]+cai[i]);
}
}
cout<<p-dp[p-5]-cai[n-1]<<endl;
}
}