#include<stdio.h>
#include<string.h>
void main()
{
int max(int x,int y);
int n,a[1000],m,i,maxi,k,dp,j,int dp[1000];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
//找出价格最大的菜
maxi=a[0];
k=0;
for(i=1;i<n-1;i++)
{
if(a[i]>a[0])
{
maxi=a[i];
k=i;
}
}
//使余额尽量接近五块但大于五
if(m<5)
printf("%d\n",m);
else
{
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=m;j>=5;j--)
if(i!=k&&a[i]<=m-5)
{
dp[j]=max(dp[j],(dp[j-1]+dp[i]));
}
}
printf("%d\n",m-dp[m]-maxi);
}
}
}
int max(int x,int y)
{
return x>y?x:y;
}
o&&1背包问题
时间: 2024-10-04 13:52:17