解题报告
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define inf 99999999
using namespace std;
int v,w[35],d[4],dw1,sum,dp[31*1000*100];
int main()
{
double Q,dw;
int n,i,j,m,t;
char c;
while(~scanf("%lf %d",&Q,&n)) {
m=0;
v=(int)(Q*100);
memset(dp,0,sizeof(dp));
memset(w,0,sizeof(w));
if(!n)break;
for(i=1; i<=n; i++) {
scanf("%d",&t);
sum=0;
int f=0;
memset(d,0,sizeof(d));
for(j=1; j<=t; j++) {
scanf(" %c:%lf",&c,&dw);
dw1=(int)(dw*100);
if(c>='A'&&c<='C') {
d[c-'A']+=dw1;
sum+=dw1;
} else f=1;
}
if(!f&&sum<=100000&&d[0]<=60000&&d[1]<=60000&&d[2]<=60000) {
w[m++]=sum;
}
}
for(i=0; i<m; i++) {
for(j=v; j>=w[i]; j--) {
dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
}
}
printf("%.2lf
",dp[v]/100.0);
}
}最大报销额
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16358 Accepted Submission(s): 4775
Problem Description
现有一笔经费能够报销一定额度的发票。同意报销的发票类型包含买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元。每张发票上。单项物品的价值不得超过600元。
现请你编敲代码,在给出的一堆发票中找出能够报销的、不超过给定额度的最大报销额。
Input
測试输入包括若干測试用例。
每一个測试用例的第1行包括两个正数 Q 和 N。当中 Q 是给定的报销额度,N(<=30)是发票张数。随后是 N 行输入,每行的格式为:
m Type_1:price_1 Type_2:price_2 ... Type_m:price_m
当中正整数 m 是这张发票上所开物品的件数,Type_i 和 price_i 是第 i 项物品的种类和价值。物品种类用一个大写英文字母表示。
当N为0时。所有输入结束,对应的结果不要输出。
Output
对每一个測试用例输出1行,即能够报销的最大数额。精确到小数点后2位。
Sample Input
200.00 3 2 A:23.50 B:100.00 1 C:650.00 3 A:59.99 A:120.00 X:10.00 1200.00 2 2 B:600.00 A:400.00 1 C:200.50 1200.50 3 2 B:600.00 A:400.00 1 C:200.50 1 A:100.00 100
Java实现 蓝桥杯VIP 算法提高 排队打水问题
Java实现 蓝桥杯VIP 算法提高 排队打水问题
Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
现在使用控件, 更喜欢继承(覆盖控件已有的函数,很奇怪的一种使用方式)
Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)