zoukankan      html  css  js  c++  java
  • HDU 1864

    发票的额度是小数,但是只要求精确到两位,所以我们把初始数据乘以100进行处理。这道题我比较纠结的是dp的数组到底开多大...开大了内存超限,小了数组越界。

    #include<stdio.h>
    #include<string.h>
    int val[50];//记录符合报销条件的发票的额度。(乘以100以后)
    int tmp[26];//临时记录发票每项的总额
    int dp[3500000];//表示在钱数不超过i的前提下能报销的发票的钱的额度的最大总和
    int max(int a,int b)
    {
        if(a>b)
            return a;
        return b;
    }
    int main()
    {
        double maxi,dtmp,sum;
        int n,i,j,nn,ok,num,imaxi;
        char ab;
        scanf("%lf%d",&maxi,&n);
        imaxi=maxi*100;
        while(n)
        {
            num=0;
            for(i=0;i<n;i++)
            {
                memset(tmp,0,sizeof(tmp));
                sum=0;
                ok=1;
                scanf("%d",&nn);
                for(j=0;j<nn;j++)
                {
                    getchar();
                    scanf("%c",&ab);
                    if(ab!='A'&&ab!='B'&&ab!='C')
                        ok=0;
                    getchar();
                    scanf("%lf",&dtmp);
                    tmp[ab-65]+=dtmp*100;
                    sum+=dtmp*100;
                    if(tmp[ab-65]>60000||sum>100000)
                        ok=0;
                }
                if(ok)
                    val[num++]=sum;
            }
            memset(dp,0,sizeof(dp));
            for(i=0;i<num;i++)
            {
                for(j=imaxi;j>=val[i];j--)
                {
                    dp[j]=max(dp[j],dp[j-val[i]]+val[i]);
                }
            }
            double r=dp[imaxi];
            printf("%.2lf
    ",r/100);
            scanf("%lf%d",&maxi,&n);
            imaxi=maxi*100;
        }
        return 0;
    }
  • 相关阅读:
    查看虚拟机里的Centos7的IP
    display:none visibility:hidden opacity:0区别
    UVA
    Gym
    Gym
    UVALive
    面试题1
    vuex的5个属性值
    vue中的.sync语法糖
    绝对定位实现垂直居中的优缺点
  • 原文地址:https://www.cnblogs.com/tun117/p/4429324.html
Copyright © 2011-2022 走看看