首页 > 其他分享 >HDU 1864最大报销额(一维背包)

HDU 1864最大报销额(一维背包)

时间:2023-04-13 21:34:36浏览次数:49  
标签:aa HDU int 1864 一维 ans 100 include dp


题目地址:HDU 1864

刚上来看着挺麻烦的。。仔细看了看原来好简单好简单。。。只要去掉一些不符合要求的发票,剩下的就是最简单的背包问题了。。对于小数问题,只要*100就变成整数了。

代码如下:


#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
using namespace std;
int dp[3000000], aa[40];
int main()
{
    double q,y, ans;
    int n, m,i,p ,j, x, flag, s, k, a, b, c;
    char ch;
    while(scanf("%lf%d",&q,&p)!=EOF&&p)
    {
        x=q*100;
        j=0;
        for(i=0; i<p; i++)
        {
            scanf("%d",&m);
            flag=0;
            s=0;
            a=b=c=0;
            while(m--)
            {
                getchar();
                scanf("%c:%lf",&ch,&y);
                if(ch=='A')
                {
                    a+=y*100;
                }
                else if(ch=='B')
                {
                    b+=y*100;
                }
                else if(ch=='C')
                {
                    c+=y*100;
                }
                else
                {
                    flag=1;
                }
                if(a>60000||b>60000||c>60000)
                    flag=1;
            }
            s=a+b+c;
            if(!flag&&s<=100000)
            {
                aa[j++]=s;
            }
        }
        memset(dp,0,sizeof(dp));
        for(i=0;i<j;i++)
        {
            for(k=x;k>=aa[i];k--)
            {
                dp[k]=max(dp[k],dp[k-aa[i]]+aa[i]);
            }
        }
        ans=dp[x]*1.0/100;
        printf("%.2lf\n",ans);
    }
    return 0;
}



标签:aa,HDU,int,1864,一维,ans,100,include,dp
From: https://blog.51cto.com/u_16070138/6188417

相关文章

  • HDU 5045 Contest(费用流)
    题目地址:HDU5045终于在比赛中用网络流A了一道题。。。刷了那么多网络流,终于用到一次了。。虽然题目很简单,但是还是要纪念一下下。。。我这题的思路就是求m/n次费用流,每n个算作同一轮,对这同一轮的求最大费用流。建图就很简单了,最简单的二分图模型。代码如下:#include<iostre......
  • HDU 1856 More is better(并查集+离散化)
    题目地址:HDU1856水题。由于标号范围太大,而数据数只有10w,所以要先进行离散化。然后就是裸的并查集了。代码如下:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<stdlib.h>#include<math.h>#include<ctype.h>#include<que......
  • HDU 2473 Junk-Mail Filter(并查集的删除操作)
    题目地址:HDU2473这题以前碰到过,没做出来。。现在又做了做,还是没做出来。。、、这题涉及到并查集的删除操作。想到了设一个虚节点,但是我把虚节点设为了要删除的点的父节点,一直是栈溢出,目测是无限递归了。看了看别人的做法,原来只要建一个映射就可以了,虚节点是作为的新的映射,每......
  • HDU 2120 Ice_cream's world I(并查集)
    题目地址:HDU2120这题虽然字数不多,但就是看不懂。。意思是求最多有多少个被墙围起来的区域。显然就是求环的个数。然后用并查集求环个数就可以了。代码如下:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<stdlib.h>#include<math......
  • HDU 2604 Queuing(矩阵快速幂)
    题目地址:HDU2604这题只要推出公式来,构造矩阵就很容易了,问题是推不出公式来。。TAT。。从递推的思路考虑,用f(n)表示n个人满足条件的结果,如果最后一个是m则前n-1人可以任意排列,有f(n-1)种;如果是f,则考虑后两位mf和ff,没有一定满足或者一定不满足的状态,所以继续考虑一位,考虑后三位......
  • HDU 1588 Gauss Fibonacci(矩阵快速幂)
    题目地址:HDU1588用于构造斐波那契的矩阵为1,11,0设这个矩阵为A。sum=f(b)+f(k+b)+f(2*k+b)+f(3*k+b)+........+f((n-1)*k+b)<=>sum=A^b+A^(k+b)+A^(2*k+b)+A^(3*k+b)+........+A^((n-1)*k+b)<=>sum=A^b+A^b*(A^k+A^2*k+A^3*k+.......+A^((n-1)*k))(1)设矩阵B为A^k;那么(1......
  • HDU 3306 Another kind of Fibonacci(矩阵快速幂)
    题目地址:HDU3306没什么智商的题目,只要把构造矩阵硬算出来就行。代码如下:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<stdlib.h>#include<math.h>#include<ctype.h>#include<queue>#include<......
  • 6.一维数组、字符串数组二维数组和多维数组
    一维数组字符串数组二维数组多维数组一维数组语法:语法类型 数组名[数组大小]={元素,元素}eg:intdata[3]={1,2,3}输出数组名为,首元素地址cout<<data<<endl;cout<<&data[0]; 第一个元素下标为0,data[0]=1;如果内容不满intdata[3]={1,2};......
  • 约瑟夫环问题---&解题方法 静态单链表&一维数组
      importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=input.nextInt();intm=input.nextInt();int[]ant=newint[150];for(int......
  • (KMP 1.1)hdu 1711 Number Sequence(KMP的简单应用——求pattern在text中第一次出现的
    题目:NumberSequenceTimeLimit:10000/5000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):12902    AcceptedSubmission(s):5845ProblemDescriptionGiventwosequencesofnumbers:a[1],a[2],......,a[N],andb[1......