hdu1864最大报销额(01背包)

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=187#problem/G

该题要注意的就是每张单子A种类的总和不能大与600,同样B,C类也一样,还有注意如果不是A,B,C类的不可以报销;

该题就是要把浮点型变成整数这样才能用01背包,这里就只要乘以100就可以了。

这题考的背包很简单,就是输入的金额为背包的容积,债券既是物体的体积又是物体的利润。就是处理输入的数据有点麻烦,这是我所不擅长的。

复制代码
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int dp[3000001],w[31];
int main()
{
    int n,V,m,flag,tt;
    double sum,price;
    char c;
    while(scanf("%lf%d",&sum,&n)!=EOF)
    {
       if(n==0) break;
       sum=sum*100;
       V=(int)sum;
       tt=0;
       int t,ta=0,tb=0,tc=0,x;
       for(int i=1;i<=n;i++)
       {
           sum=0;
           ta=0,tb=0,tc=0;
           scanf("%d",&m);
           flag=0;
           while(m--)
           {
               scanf("%*c%c:%lf",&c,&price);
               price=price*100;
               x=(int)price;
               if(flag==0)
               {
                   if((c=='A')||(c=='B')||(c=='C'))
                   {
                       if(c=='A'&&ta+x<=60000)
                       {
                           ta=ta+x;
                       }
                       else if(c=='B'&&tb+x<=60000)
                       {
                           tb=tb+x;
                       }
                       else if(c=='C'&&tc+x<=60000)
                       {
                           tc=tc+x;
                       }
                       else flag=1;
                   }
                   else flag=1;
               }
           }
           t=ta+tb+tc;
           if(flag==0&&t<=100000)
           {
               w[tt++]=t;
           }
       }
       memset(dp,0,sizeof(dp));
       for(int i=0;i<tt;i++)
       {
           for(int j=V;j>=w[i];j--)
           {
               if(dp[j-w[i]]+w[i]>dp[j])
                dp[j]=dp[j-w[i]]+w[i];
           }
       }
       double money=dp[V]/100.0;
       printf("%.2lf\n",money);
    }
    return 0;
}
复制代码

 

posted @   人艰不拆_zmc  阅读(859)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示