首页 > 代码库 > o&&1背包问题
o&&1背包问题
#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;
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。