hdoj1864

   不得不说自己是非常的马虎,抛开算法不说,只是输入我都写错了,让我改了半个小时,算法还是没想出来,参考别人的要来好长时间,然后的然后发现自己题读错了,而且错了好多,唉唉,咋这么马虎啊,需要多练习啊!

  这个题属于01背包的问题,与hdoj2602有相似的地方!#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct fun{
int x;
char s;
float price;
float sum;
}a[95];
int main()
{
float q,c[31],ans,su,b,e,f;
int n,i,j,t;
char w;
while(scanf("%f%d",&q,&n)&&n)
{
j=1;
while(n--)
{
scanf("%d",&a[j].x);
t=0;
a[j].sum=0; e=0;b=0;f=0;
while(a[j].x--)
{
getchar();
scanf("%c%c%f",&a[j].s,&w,&a[j].price);
if(a[j].s=='A')
b+=a[j].price;
else if(a[j].s=='B')
e+=a[j].price;
else if(a[j].s=='C')
f=f+a[j].price;
else
t=1;
if(b>600||e>600||f>600||e+b+f>1000)
t=1;
}
if(t==1)
a[j].sum=0;
else
a[j].sum=e+b+f;
j++;
}
t=j-1;
memset(c,0,sizeof(c));
su=0;
for(i=1;i<=t;i++)
{
ans=0;
for(j=1;j<i;j++)
{
if((c[j]>ans)&&(c[j]+a[i].sum<=q))
ans=c[j];
}
c[i]=a[i].sum+ans;
if(c[i]>su)
su=c[i];
}
printf("%.2f\n",su);
}
return 0;
}
状态转移方程:best[i]=max(best[j],best[j]+w[i])(best[j]+w[i]<q&&j<i)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定的小Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值