hdu 最大报销额 求助 --acm初学者

[复制链接]
查看11 | 回复1 | 2011-8-4 20:13:16 | 显示全部楼层 |阅读模式
#include
using namespace std;
int f[3100000];
int main()
{
int i,j,n,flag,num,max;
double q,t[31];
double a[3],temp,sum;
char c,c1;
while(scanf("%lf%d",&q,&n),n)
{
i=1;
while(n--)
{ cin>>num;
sum=0;
flag=0;
for(j=0;j>c>>c1>>temp;
sum+=temp;
if(c!='A'&&c!='B'&&c!='C')
{ flag=1; continue; }
a[c-'A']+=temp;
if(sum>1000||a[c-'A']>600)
flag=1;
}
if(flag==0)
t[i++]=sum;
}
n=i-1;
max=(int)(q*100);
for(i=0;i= (int)(t * 100);j--)

if( f[j] = (int)(t * 100);j--)

if( f[j] < f[j - (int)(t * 100)] + (int)(t * 100))

f[j] = f[j - (int)(t * 100)] + (int)(t * 100);
(清楚一点 *^_^*)

回复

使用道具 举报

千问 | 2011-8-4 20:13:16 | 显示全部楼层
0—1背包,把每张发票当一个物品,其中,发票中有单项大于600的或者总额大于1000的,这张发票扔掉不要(但要等输入都结束后再扔掉,不要遇见超过的就break因为后面还会有数据输入),也就是不加入物品的行列。整理出每张发票的总额,作为这件物品的价值也作为容量(相当于物品的体积),放到容量为q的背包中,这就是标准的0—1背包了;再推荐你去仔细看看背包九讲,加油,学好DP。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行