zoukankan      html  css  js  c++  java
  • HDOJ 1864 最大报销额

    最大报销额

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 12524    Accepted Submission(s): 3452


    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 32 A:23.50 B:100.001 C:650.003 A:59.99 A:120.00 X:10.001200.00 22 B:600.00 A:400.001 C:200.501200.50 32 B:600.00 A:400.001 C:200.501 A:100.00100.00 0
     
    Sample Output
    123.501000.001200.50
     
    Source
     
    Recommend
    lcy
     

    D(i)表示报销到i号发票的最大值

    D(i)=max{D(j)+P[i]}  //D(j)i之前报销的发票最大值。P[i]i张发票的值

    然后在找到最大的 D(i) 就行了

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 int N;
     6 double Q;
     7 double PL[110];    int cur=0;
     8 int main()
     9 {
    10     while(scanf("%lf%d",&Q,&N)!=EOF&&N)
    11     {
    12         memset(PL,0,sizeof(PL));
    13         cur=0;
    14         while(N--)
    15         {
    16             int n;
    17             cin>>n;
    18             int OK=1;double sum=0;
    19             double A=0,B=0,C=0;
    20             for(int j=0;j<n;j++)
    21             {
    22                 char ch,c;
    23                 double co;
    24                 getchar();
    25                 scanf("%c%c%lf",&ch,&c,&co);
    26  //               cout<<"ch: "<<ch<<" c: "<<c<<" co: "<<co<<endl;
    27                 if(ch>='A'&&ch<='C')
    28                 {
    29                     if(ch=='A')  A+=co;
    30                     else if(ch=='B') B+=co;
    31                     else if(ch=='C') C+=co;
    32                     sum+=co;
    33                 }
    34                 else   OK=0;///含有其他项目
    35                 if(sum>1000.)  OK=0;///总额超标
    36                 if(A>600.||B>600.||C>600.)  OK=0;///单项超标
    37             }
    38             if(OK)  PL[cur++]=sum;
    39         }
    40 /*
    41         for(int i=0;i<cur;i++)
    42             cout<<PL[i]<<" , ";
    43         cout<<endl<<endl;
    44 */
    45         double dp[40];
    46         for(int i=0;i<cur;i++)
    47            dp[i]=PL[i];
    48         for(int i=1;i<cur;i++)
    49         {
    50             for(int j=0;j<i;j++)
    51             {
    52                 double temp=dp[j]+PL[i];
    53                 if(temp<=Q&&dp[i]<temp)
    54                     dp[i]=temp;
    55             }
    56         }
    57         double ans=0.0;
    58         for(int i=0;i<cur;i++)
    59         {
    60             if(dp[i]-ans>1e-6)
    61                 ans=dp[i];
    62         }
    63         printf("%.2lf\n",ans);
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    基于storm和hadoop的广告系统研究【2】
    基于storm和hadoop的广告系统研究【1】
    签名ipa,让其它手机也安装
    UIWebview 截获html并修改内容。
    Resetting the SMC & PRAM
    UITableview 兼容IOS6 和IOS7的方法
    IOS7 APP 升级的10个TIP 建议
    IOS: Xcode报 Undecleared selector Warning错误的解决方法
    十个iOS面试问题
    iOS制作Static Library(静态库),实现多工程的连编
  • 原文地址:https://www.cnblogs.com/CKboss/p/3084034.html
Copyright © 2011-2022 走看看