码迷,mamicode.com
首页 > 其他好文 > 详细

hdu1864最大报销额 01

时间:2017-09-08 23:03:00      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:include   har   turn   printf   log   double   clu   mem   ++   

先把小数乘100变成整数然后处理每个发票里面可以报销的

最后自底向上DP

#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;

int dp[3000050];

int main()
{
    char ch;
    double x,y;
    int sum,a,b,c,money[35],v;
    int t,i,j,k;
    while(~scanf("%lf%d",&x,&t),t)
    {
        sum = (int)(x*100);
        memset(money,0,sizeof(money));
        memset(dp,0,sizeof(dp));
        int l = 0;
        for(i = 0; i<t; i++)
        {
            scanf("%d",&k);
            a = b = c = 0;
            int flag = 1;
            while(k--)
            {
                scanf(" %c:%lf",&ch,&y);
                v = (int)(y*100);
                if(ch == A && a+v<=60000)
                    a+=v;
                else if(ch == B && b+v<=60000)
                    b+=v;
                else if(ch == C && c+v<=60000)
                    c+=v;
                else
                    flag = 0;
            }
            if(a+b+c<=100000 && a<=60000 && b<=60000 && c<=60000 && flag)
                money[l++] = a+b+c;
        }
        for(i = 0; i<=l; i++)
        {
            for(j = sum; j>=money[i]; j--)
                    dp[j] = max(dp[j],dp[j-money[i]]+money[i]);
        }
        printf("%.2lf\n",dp[sum]/100.0);
    }

    return 0;
}

 

hdu1864最大报销额 01

标签:include   har   turn   printf   log   double   clu   mem   ++   

原文地址:http://www.cnblogs.com/Aragaki/p/7496564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!