• HDU 1864 01背包、


    这题题意有点坑阿、感觉特别模糊、

    我开始有一点没理解清楚、就是报销的话是整张整张支票报销的、也是我傻逼了 没一点常识

    还有一点就是说单张支票总额不超过1000,每张支票中单类总额不超过600,我开始以为是题目数据会这样给、 没想到还要自己判断

    并且不符合条件的支票要直接舍去、- -、只能怪自己题目做少了、   没事还是好好刷题、   纵使别人放弃 我也不允许自己放弃

    这题的输入数据全部都是2位小数,可以直接化为整数处理

    然后就是裸的01背包了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int qq=5000000+50;
     7 int dp[qq];
     8 int p[qq];
     9 int main()
    10 {
    11     double tot;
    12     int n;
    13     while(~scanf("%lf%d",&tot,&n)&&n){
    14         memset(dp,0,sizeof(dp));
    15         int sum=(int)(tot*100);
    16     //    printf("%d
    ",sum);
    17         int count=0,m;
    18         double x;
    19         char s;
    20         for(int i=0;i<n;++i){
    21             scanf("%d",&m);
    22             int a,b,c,flag;
    23             a=b=c=0;
    24             flag=1;
    25             for(int j=0;j<m;++j){
    26                 scanf("%*c%c%*c%lf",&s,&x);
    27                 int y=(int)(x*100);
    28                 if(s=='A')    a+=y;
    29                 else if(s=='B')    b+=y;
    30                 else if(s=='C')    c+=y;
    31                 else    flag=0;
    32             }
    33             if(a+b+c<=1e5 && a<=60000 && b<=60000 && c<=60000 && flag)
    34                 p[count++]=a+b+c;
    35         }
    36         for(int i=0;i<count;++i)
    37             for(int j=sum;j>=p[i];--j)
    38                 dp[j]=max(dp[j],dp[j-p[i]]+p[i]);
    39         printf("%.2lf
    ",dp[sum]*1.0/100);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    cookie小结
    WEB服务器,TOMCAT和servlet之间的关系
    HTTP协议基础总结
    servlet总结
    注解总结
    常使用的String方法
    变量&&常量
    标识符&&注释&&关键字
    配置环境变量&&OpenJDK和OracleJDK区别
    逆向工程__Generate插件安装 && xml配置文件解析 &&使用反向生成代码 && 接口说明
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5357458.html
Copyright © 2020-2023  润新知