zoukankan      html  css  js  c++  java
  • HDU_1864_01背包

    http://acm.hdu.edu.cn/showproblem.php?pid=1864

    题目好像是输入的数据都是两位小数,先统计能报销的发票,然后把小数*100变成成熟就是01背包问题了。

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    
    using namespace std;
    
    double total;
    int n; 
    int dp[3000050];
    int main()
    {
        while(~scanf("%lf%d,&total",&total,&n) && n)
        {
            memset(dp,0,sizeof(dp));
            int counts = 0,ans[35] = {0};
            while(n--)
            {
                int num,flag = 1;
                double all[3] = {0};
                scanf("%d",&num);
                while(num--)
                {
                    getchar();
                    char c;
                    double temp;
                    scanf(" %c:%lf",&c,&temp);
                    if(c != 'A' && c != 'B' && c != 'C')
                    {
                        flag = 0;
                        break;
                    }    
                    all[c-'A'] += temp;
                }
                if(flag && all[0] < 600+1e-6 && all[1] < 600+1e-6 && all[2] < 600+1e-6)
                {
                    ans[counts++] = (int)(100*all[0]+100*all[1]+100*all[2]);
                }
            }
            for(int i = 0;i < counts;i++)
            {
                for(int j = (int)(total*100);j >= ans[i];j--)
                {
                    dp[j] = max(dp[j],dp[j-ans[i]]+ans[i]);
                }
            }
            printf("%.2f
    ",(double)dp[(int)(total*100)]/100);
        } 
        return 0;
    }
  • 相关阅读:
    软件工程实践总结
    用户使用调查报告
    Beta 冲刺 随笔合集
    Beta 冲刺 七
    Beta 冲刺 六
    Beta 冲刺 五
    Beta 冲刺 四
    Beta 冲刺 三
    Beta 冲刺 二
    Beta 冲刺 一
  • 原文地址:https://www.cnblogs.com/zhurb/p/5883220.html
Copyright © 2011-2022 走看看