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

    题目链接

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

    这题开始题意没搞清楚,就做题了,导致浪费了很多的时间,不应该啊,

    注意事项:每张发票上,单项物品的价值不得超过600元,这里要小心,就是说    2  A:450  A:200  这张票是不能报销的  它为650了,

    开始我没想到他会有这样的数据,这次还犯了一个低级错误,dp竟然没有初始化,这样的错误不能犯啊! 

    还有对于小数的处理我是直接乘以100的, 不知哪位高人有更好的办法,还请多多指点,

    代码

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

    int dp[3000005];

    int main(void)
    {
    int i,j,k;
    double q,s,s1,s2,s3;
    int n,m;
    char c;
    double p;
    int v[35];
    while(scanf("%lf%d",&q,&n)==2&&n)
    {
    k=0;
    memset(dp,0,sizeof(dp));
    int q1=q*100;
    for(i=0;i<n;i++)
    {
    int ok=0;
    s=0; s1=0; s2=0; s3=0;
    scanf("%d",&m);
    for(j=0;j<m;j++)
    {
    getchar();
    scanf("%c:%lf",&c,&p);
    if(c=='A')
    {
    s1=s1+p;
    }
    else if(c=='B')
    {
    s2=s2+p;
    }
    else if(c=='C')
    {
    s3=s3+p;
    }
    else
    {
    ok=1;
    break;
    }
    }
    s=s1+s2+s3;
    if(s1<=600&&s2<=600&&s3<=600&&s<=1000&&ok==0)
    {
    v[k++]=s*100;
    }
    }
    for(i=0;i<k;i++)
    {
    for(j=q1;j>=v[i];j--)
    {
    dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
    }
    }
    printf("%.2lf ",(double)dp[q1]/100);
    }
    return 0;
    }


    参数
    234MS 12100K 1397 B

  • 相关阅读:
    添加右键菜单
    闭包和迭代器
    函数的进阶
    函数入门
    文件操作
    深浅拷贝
    小数据池和再谈编码
    字典
    list tuple
    int bool str
  • 原文地址:https://www.cnblogs.com/liudehao/p/4109299.html
Copyright © 2011-2022 走看看