这个题,诶~~~,转变一下思路,当时一心想着用背包解决,把正确思路给淹没了。
#include <iostream>
#include <iomanip>
#include<queue>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
#include<string.h>
#include<sstream>
#include<string>
#include<queue>
#define MAX 5842
//¶¨Ò庯Êý¶Î
#define repf(i,a,b) for(int i =(a);i<(b);i++)
#define repfe(i,a,b) for(int i =(a);i<=(b);i++)
using namespace std;
struct School{
public :
int cost;
double p ;
};
int food[1111];
bool cmp(int a, int b)
{
return a <b ;
}
double dp[1111];
int main() {
int num_food,money,most;
while(cin>>num_food&&num_food!=0)
{
repf(i,0,num_food)
{
cin>> food[i];
}
cin>>money;
if(money<5)
{
cout << money<<endl;
continue ;
}
money-=5;
sort(food,food+num_food,cmp);
most = food[num_food-1];
// cout << "most"<< most <<endl;
memset(dp,0,sizeof(dp));
repf(i,0,num_food-1)
{
for(int j = money;j>=food[i];j--)
{
dp[j]= max(dp[j],dp[j-food[i]]+food[i]);
}
}
// cout << dp[money] <<" " << most <<endl;
cout << money-dp[money]+5-most<<endl;
}
return 0 ;
}