最大报销额 hdu1864 01背包

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

http://acm.hdu.edu.cn/showproblem.php?pid=1864

最初WA是以为单项指的是每一个商品价格不得超过600块,其实应该是ABC类中每类的价格不得超过600块。

还有一次WA是因为value数组开的略大,memset狠容易就超时了。

这个题把价格乘以100,用01背包来解决。

#include <iostream>
using namespace std;
#define N 35
#define NV 30*100005
double check[N],value[NV];

double max(double a,double b){
	return a>b?a:b;
}

int main(){
#ifndef ONLINE_JUDGE
	freopen("1864in.txt","r",stdin);
#endif
	int n,m,i,j,k;
	double volume,sum,k1,k2,k3;
	char type;
	bool flag;
	while (scanf("%lf%d",&volume,&n)!=EOF&&n){
		k=0;
		while (n--){
			flag=true;
			k1=k2=k3=0;
			scanf("%d",&m);
			for (i=0;i<m;i++){
				getchar();
				scanf("%c:%lf",&type,&check[k]);
				if (type=='A')
					k1+=check[k];
				else if (type=='B')
					k2+=check[k];
				else if (type=='C')
					k3+=check[k];
				else flag=false;
			}
			if (k1>600.0||k2>600.0||k3>600.0||k1+k2+k3>1000.0)
				flag=false;
			if (flag){
				check[k]=k1+k2+k3;
				k++;
			}
		}
		if ((int)(volume*100)>=NV){
			sum=0;
			for (i=0;i<k;i++)
				sum+=check[k];
			printf("%.2lf\n",sum);
		}
		else {
			memset(value,0,sizeof(value));
			for (i=0;i<k;i++)
				for (j=(int)(volume*100);j>=(int)check[i]*100;j--)  //(int)volume*100代表先把volume转成int,再乘100,那样就错了。
					value[j]=max(value[j],value[j-(int)(check[i]*100)]+check[i]);
			printf("%.2lf\n",value[(int)(volume*100)]);
		}
	}
	return 0;
}


HDU 1864 最大报销(01背包) HDU 1864 最大报销(01背包) http://acm.hdu.edu.cn/showproblem.php?pid=1864 题意:        现有一笔经费可以报销一定度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不 阅读详情

相关推荐

hdu1864 最大报销 01背包

最大报销Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 29672    Accepted Submission(s): 9092Problem Description现有一笔经费可以报销一定度的发票。允许报销的发票类型包括买图书(A类...

popcjz的博客 1316

HDU 1864 最大报销 01背包

HDU 1864 最大报销 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17530    Accepted Submission(s): 5141 Problem Description 现有一笔经费可以报销

TaoSama's Microcosm 458

HDU 1864 最大报销 (01背包)

题目链接:HDU 1864 最大报销 01背包。 把张数当成背包,状态转移方程:f[j]=max(f[j],f[j-1]+v[i]),f[j]表示把j张装进背包最大报销。 这题这么做还是有点问题,比如这组数据: 100.00 5 1 A:5 1 B:20 1 C:24 1 A:30 1 A:60 f[3]为114,f[2]为90,f[3]超过了100.00,那么就会输

fobdddf的专栏 606

hdu 1864 01背包 最大报销

http://acm.hdu.edu.cn/showproblem.php?pid=1864 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的选拔 最大报销 Time Limit: 1000/1000 MS (Java/Others)...

179

HDU 1864最大报销——01背包

最大报销 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 33746 Accepted Submission(s): 10395 Problem Description 现有一笔经费可以报销一定度的发票。允许报销的发票类型包括买...

小橘子的AC之旅 696

hdu 1864 最大报销 01背包变形

Problem Description 现有一笔经费可以报销一定度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定度的最大报销。 Input 测试输入包含若干测试用例。每个测试用例的第1行包含两个正数 Q 和 N,其中 Q 是给定的报销度,N(<=30)是发票张数。随后是 N 行输入,每行的格式为: m Type_1:price

Lionel 1038

HDU1864 最大报销 01背包

HDU1864 最大报销 01背包

qq_44919369的博客 188

最大报销 HDU - 1864(DP+01背包

最大报销 HDU - 1864 点击跳转↑ 题设:多组输入,每组输入一对Q和N,分别代表当前的公费,和需要报销的账单总数。接下来N行,每行开始一个m,接下来是m项物品的名称和价格。求:在所有符合报销规则的账单中,任意组合,让总报销不超过公费且最大。 思路:简单的背包,但是有坑,首先需要读懂题意,账单的报销规则为: 1-允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类) ==>单张账单中,只能出现“A”,“B”,“C”三种类型的物品 2-每张发票的总不得超过1000元 ==>

自伤无色的博客 538

最大报销 HDU - 186401背包

最大报销 现有一笔经费可以报销一定度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定度的最大报销。 Input 测试输入包含若干测试用例。每个测试用例的第1行包含两个正数 Q 和 N,其中 Q 是给定的报销度,N(...

YOONGI 355

hdu1864 最大报销01背包

最大报销 Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10647Accepted Submission(s): 2875 Problem Description 现有一笔经费可以报销一定度的发票。允许报销的发...

angtongyou1893的博客 112

01背包 HDU——1864 最大报销

转化为整数扩大100倍处理 //*为赋值抑制字符,表示本输入项对应的数据 //读入后,不赋给相应的变量 如: //scanf("%2d%*2d%3d",&a,&b); printf("%d\n%d\n",a,b); 输入123456789 //则系统将读取12并赋给a 读取34但舍掉 读取567并赋给b 所以a=12 b=567 //处理好输入后,将值存入f[]中并套用01背包 #

1.3秒前 555

HDU ~ 1864 ~ 最大报销01背包

题目网址:最大报销 最大报销 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 现有一笔经费可以报销一定度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总不得超过1000元,每

张松超的博客 468

HDU - 1864 最大报销01背包

题目链接: [最大报销] 大致题意: 给一些发票,每张发票都有一个报销,每张发票还有一个判断合不合法的过程,它要求的是每张发票上的A,B,C每类都不大于,每张发票要么全报要么全不报。问你在总报销不大于Q的情况下最大的总报销是多少 解题思路: 假设每张发票的重量都是1,背包容量就是发票的张数 只要从大到小枚举张数就好了,碰见第一个不大于Q的值就是答案 AC代码: #include <bits/stdc++.h> typedef long long ll; using namespac

qq_49494204的博客 229

HDU1864 最大报销01背包

最大报销 Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 32784Accepted Submission(s): 10115 Problem Description 现有一笔经费可以报销一定度的发票。允许报销的发票...

逐梦者 303

HDU 1864 最大报销(01背包应用)

最大报销 Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9752Accepted Submission(s): 2603 Problem Description 现有一笔经费可以报销一定度的发票...

weixin_30596165的博客 105

[HDU - 1864] 最大报销 (01背包)

链接 http://acm.hdu.edu.cn/showproblem.php?pid=1864 题意 总共有nnn张发票,你需要去报销它们,但是有报销度;每张发票给出了购买物品类型,以及对应消费价格,可以报销的发票为,购买物品只能包含A、B、CA、B、CA、B、C,并且每种物品消费不得超过600600600,总消费价格不得高于100010001000,问最多可以报销多少; 分析   显然我...

梧桐 273

HDU 1864 最大报销(dfs和01背包都可以)

最大报销 Problem Description 现有一笔经费可以报销一定度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定度的最大报销。   Input 测试输入包含若干测试用例。每个测试用例的第1行包含

Algobird 540

HDU -1864最大报销(01背包)

这道题属于简单的01背包,但是背包问题还算简单,就是前面的细节处理的时候要注意,题意大致说了三条限制吧 1. 只有a, b, c 三种类型的发票可以报销,其它的一律不报销 2. 物品单项的报销不超过600 3. 每个发票总不超过1000 有了这三个,还有一个要小心的就是报销可以为浮点数,所以这里有个小技巧,就是将它乘100,到最后再除以100, 为什么要乘100呢, 因为最...

dizhuo0219的博客 132
上一篇: A strange lift hdu1548 Dijkstra算法
下一篇: Palindromes UVa401 字符串
花酱_
博客等级 码龄14年 30粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值