//用dfs做的,但是正解似乎是dp
//http://acm.hdu.edu.cn/showproblem.php?pid=1864
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
vector<double> v;
double ans,price;
int n;
void dfs(double sum,int t);
int main(){
scanf("%lf%d",&price,&n);
// cout<<n<<endl;
double ss=0;
while(n){
ans=0,ss=0;
v.clear();
while(n--){
int m,flag=1;
char type;
double p,sum=0,a=0,b=0,c=0;
scanf("%d",&m);
getchar();
for(int i=0;i<m;i++){
scanf("%c:%lf",&type,&p);
// cout<<type<<endl;
getchar();
if(type=='A'){
a+=p;
sum+=p;
}
else if(type=='B'){
b+=p;
sum+=p;
}
else if(type=='C'){
c+=p;
sum+=p;
}
else{
flag=0;
}
}
if(sum>1000||(a>600)||(b>600)||(c>600)) continue;
if(!flag) continue;
if(sum>price) continue;
// cout<<sum<<endl;
v.push_back(sum);
ss+=sum;
}
// cout<<ss<<endl;
if(ss<=price){
printf("%.2lf\n",ss);
}
else{
dfs(0,-1);
printf("%.2lf\n",ans);
}
scanf("%lf%d",&price,&n);
}
}
void dfs(double sum,int t){
// cout<<sum<<' '<<t<<endl;
if(sum>price) {
return ;
}
if(ans<sum){
ans=sum;
}
for(int i=t+1;i<v.size();i++){
dfs(sum+v[i],i);
}
return ;
}
最大报销额 HDU 1864
最新推荐文章于 2021-03-01 15:01:41 发布