HDU解题报告——1864

来源:互联网 发布:学cnc编程要先学什么 编辑:程序博客网 时间:2024/06/14 14:08

  有点坑,题意说的是每张发票中单项物品额度不超过600,也就是说两个A的话需要加起来判断,说白了就是01背包只不过先判断一下输入数据的合法性,吧发票张数当体积,发票总额度当代价记好了,代码如下:

#include <iostream>#include <cstdio>using namespace std;int main(){double q;int n;while(cin>>q>>n&&n){double value[31],r[31]={0};int tn;tn=n;for(int i=1,k=1;i<=tn;i++){char a,b;double v,va=0,vb=0,vc=0,count=0;int num;bool mark=true;cin>>num;for(int j=1;j<=num;j++){cin>>a>>b>>v;count+=v;if(a=='A') va+=v;if(a=='B') vb+=v;if(a=='C') vc+=v;if((a!='A'&&a!='B'&&a!='C')||vc>600||vb>600||va>600) mark=false;}if(!mark||count>1000) {n--;continue;}else value[k++]=count;}for(int i=1;i<=n;i++)for(int j=n;j>=0;j--)if(r[j]<r[j-1]+value[i]) r[j]=r[j-1]+value[i];double j=0;for(int i=0;i<=n;i++) if(r[i]>j&&r[i]<=q) j=r[i];printf("%.2lf\n",j);}return 0;}


 

0 0
原创粉丝点击