• hdu 1864 最大报销额【01背包变形~】(实数转整型)


     题目链接

    思路:01背包变形。由于题目要求精确到小数点后2位,那么我们可以将读入的实数扩大100倍,转为整型进行计算,最后结果除以100,保留两位小数,转为整型后这道题就是一个01背包的简单变形,读入物体的价值既是背包的花费又是背包的价值。

    注意:题意容易理解出错的地方:单项物品的价值不得超过600元。指的是每张发票上同一类物品的价值,而不是每张发票上每个物品的价值不得超过600.

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define N 3010000
    #define inf 0x3f3f3f3f
    int dp[N],f[31];
    
    int main()
    {
        int t,i,j,a,b,c,x,y,sum,count,n,m,flag,ans;
        char ch;
        double fi;
        while(scanf("%lf%d",&fi,&n),n!=0)
        {
            x = (int)(fi*100);//转为整型 
            memset(f,0,sizeof(f));
            memset(dp,0,sizeof(dp));
            for(i = 1; i <= n; i ++)
            {
                scanf("%d",&m);
                getchar();
                a = b = c = flag = 0;
                for(j = 1; j <= m; j ++)
                {
                    scanf("%c%*c%lf",&ch,&fi);
                    getchar();
                    y = (int)(fi*100);//价值转为整型 
                    if(ch == 'A'&&a+ y<= 60000)
                        a += y;
                    else if(ch == 'B'&&b+y<= 60000)
                        b += y;
                    else if(ch == 'C'&&c+y<= 60000)
                        c += y;
                    else flag = 1;
                }
                sum = a+b+c;
                if(sum<=100000&&!flag)//满足题目每张发票的总额不得超过1000元和允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类) 
                    f[i] = sum;
            }
            for(i = 1; i <= n; i ++)
                for(j = x; j >= f[i]; j--)
                    dp[j] = max(dp[j],dp[j-f[i]]+f[i]);
                    
            printf("%.2lf
    ",(double)(dp[x]/100.0));
        }
        return 0;
    }
  • 相关阅读:
    xml读写
    scrollWidth,clientWidth与offsetWidth的区别
    DIV+CSS设计时浏览器兼容性
    访问IIS客户端出现server application error解决方案
    网站局域网内不能访问解决方法之一
    xml学习笔记(一)
    文本编辑器FCKeditor
    业务部门需要IT人员为其提供什么
    程序员与VBA之怪现状
    你的代码完成了吗?(之一)——可用性和易用性
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7552548.html
Copyright © 2020-2023  润新知