01背包水题篇之HDU1864——最大报销额

这个题目好果的01,只要把每个数乘以100,就能解决下标的问题了

继续贴代码环节(自己的代码好丑啊~~~)

<span style="font-size:18px;">#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define maxn 3100000
using namespace std;
int dp[maxn];
int p[31];
int main()
{
    double Q;
    int n,V;
    while(~scanf("%lf%d",&Q,&n)&&n){
        int k=0;
        V=Q*100;
        while(n--){
            int m,flag=1;
            double ts=0,a;
            char s[10];
            cin>>m;
            double va,vb,vc;
            va=vb=vc=0;
            while(m--){
                cin>>s;

                if(s[0]!='A'&&s[0]!='B'&&s[0]!='C'){
                    flag=0;
                }
                else{
                    sscanf(s,"%*[A-Z]:%lf",&a);//我用了下sscanf函数,可以这样输入scanf("%c:%lf",&ch,&a);
                    if(s[0]=='A'){
                        va+=a;
                        if(va>600) flag=0;
                    }
                    if(s[0]=='B'){
                        vb+=a;
                        if(vb>600) flag=0;
                    }
                    if(s[0]=='C'){
                        vc+=a;
                        if(vc>600) flag=0;
                    }
                }
            }
            if(va+vb+vc>1000) flag=0;
            if(flag) p[k++]=(va+vb+vc)*100;
        }
        memset(dp,0,sizeof dp);
        for(int i=0;i<k;i++){
            for(int j=V;j>=p[i];j--){
                dp[j]=max(dp[j],dp[j-p[i]]+p[i]);//照搬01的方程
            }
        }
        printf("%.2lf\n",1.0*dp[V]/100);//输出转化为double型
    }
    return 0;
}</span>

01背包水题篇之HDU1864——最大报销额

时间: 2024-11-06 23:58:23

01背包水题篇之HDU1864——最大报销额的相关文章

01背包水题篇之 HDU2955——Robberies

原来是想dp[i],表示不被抓概率为i所能抢到的最大钱(概率1-100) 后来看了别人的博客是dp[i]表示抢了i钱最大的不被抓概率,嗯~,弱菜水题都刷不动. 那么状态转移方程就是 dp[i]=max(dp[i],dp[i-money]*p),初始化dp(0~maxn)为0,dp[0]=1(1毛钱都没抢你抓个毛线啊,哥是良民~) 又是贴代码环节~ <span style="font-size:18px;">#include<iostream> #include&

01背包水题篇之HDU3466——Proud Merchants

这是个好题,菜鸟刚学dp,这题把我以前的想法全都给完完全全的颠覆了.其实是自己没了解无后效性的概念. 然后我去开开心心滴跑去问队长:"队长,队长,怎么理解动归的无后效性啊???" 学长很深沉滴对我说:"做多了就会了" "噢噢"(好吧) 然后学长又补了句:"能构成有向无环图的都能用DP搞." 我心里想:"队长就知道搞妹~~~." 默默去翻小白书看看DAG去了. 为了搞清楚这题怎么写,操了度娘千百遍,还是没搞定

hdu2955Robberies 01背包水题

//给出每个银行的钱数和被抓的概率, //问在被抓概率小于p的情况下得到的钱数最多为多少 //直接以钱数为容量,以(1-pi)为为价值01背包就行 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 110 ; const int maxm = maxn*maxn ; double dp[maxm] ; int main() { int

NYOJ 49 开心的小明(经典01背包水题)

开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行".今天一早小明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N 元.于是,他把每件物品规定了一个重要度,分为5 等:用整数1~5 表示,第5 等最重要.他还从因特网上查到了每件物品的价格(都是整数元).

hdu1864 最大报销额(01背包)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864 Problem Description 现有一笔经费能够报销一定额度的发票.同意报销的发票类型包含买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元.现请你编敲代码,在给出的一堆发票中找出能够报销的.不超过给定额度的最大报销额. Input

1085 背包问题(0-1背包模板题)

1085 背包问题(0-1背包模板题)(51NOD基础题) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1行,2个整数,N和W中间用空格隔开.N为物品的数量,W为背包的容量.(1 <= N <= 100,1 <= W <= 10000) 第2 - N + 1行,每行

POJ 3624 Charm Bracelet(01背包裸题)

Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38909   Accepted: 16862 Description Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible fro

HDU 2602 Bone Collector(01背包裸题)

Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 60469    Accepted Submission(s): 25209 Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bo

hihoCoder #1038 : 01背包(板子题)

#1038 : 01背包 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 小Ho现在手上有M张奖券,而奖品区有N件奖品,分别标号为1到N,其中第i件奖品需要need(i)张奖券进行兑换,同时也只能兑换一次,为了使得辛苦得到的奖券不白白浪费,小Ho给每件奖品都评了分,其中第i件奖品的评分值为value(i),表示他对这件奖品的喜好值.现在他想知道,凭借他手上的这