博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-3236-Gift Hunting
阅读量:4616 次
发布时间:2019-06-09

本文共 2153 字,大约阅读时间需要 7 分钟。

题解原文

这题完全不会。。看了题解好像似懂非懂。。。先把题解弄这里来,慢慢研究

题意:

GG有两张奖券,面额分别为V1、V2,准备给MM买礼物。当天是MM生日,所以MM

还可以免费得到一份礼物。

礼物有价格和幸福值两个参数,并且礼物分为特殊礼物和普通礼物,特殊礼物

是一定要全部到手的。

两张奖券不可以合并使用,一种礼物也只能买一次。

问MM最大幸福值是多少,如果特殊礼物不能全部得到MM会不高兴,幸福值为-1 。

分析:这是一个二重01背包,因为还有免费的礼物,故还要增加一维

用f[v1][v2][s]表示奖券V1,V2分别使用v1,v2时,且状态为s时候(s=1表示已经免费得到一份礼物了,s=0表示还木有免费得到礼物),

MM的幸福值。

View Code
#include 
#include
#include
#include
#define MAXN 505using namespace std;struct node{ int cost,h;}sp[MAXN],norm[MAXN];int numsp,numnorm;int f[MAXN][MAXN][2];int V1,V2,n;bool getSpecial(){ memset(f,-1,sizeof(f)); f[0][0][0]=0; int pre=0,total=0; for(int i=0;i
=0;j--) for(int k=V2;k>=0;k--){ if(f[j][k][1]==pre){ if(j+sp[i].cost<=V1){ f[j+sp[i].cost][k][1]=total; } if(k+sp[i].cost<=V2)f[j][k+sp[i].cost][1]=total; } if(f[j][k][0]==pre){ if(j+sp[i].cost<=V1){ f[j+sp[i].cost][k][0]=total; } if(k+sp[i].cost<=V2)f[j][k+sp[i].cost][0]=total; f[j][k][1]=total; } } } bool flag=false; for(int i=V1;i>=0;i--) for(int j=V2;j>=0;j--) for(int s=0;s<=1;s++){ if(f[i][j][s]==total)flag=true; else f[i][j][s]=-1; } return flag;}int getnorm(){ for(int i=0;i
=0;j--) for(int k=V2;k>=0;k--){ for(int s=0;s<=1;s++){ if(f[j][k][s]!=-1){ if(j+norm[i].cost<=V1&&f[j][k][s]+norm[i].h>f[j+norm[i].cost][k][s]) f[j+norm[i].cost][k][s]=f[j][k][s]+norm[i].h; if(k+norm[i].cost<=V2&&f[j][k][s]+norm[i].h>f[j][k+norm[i].cost][s]) f[j][k+norm[i].cost][s]=f[j][k][s]+norm[i].h; } } if(f[j][k][0]!=-1&&f[j][k][0]+norm[i].h>f[j][k][1]) f[j][k][1]=f[j][k][0]+norm[i].h; } } int ans=0; for(int i=V1;i>=0;i--) for(int j=V2;j>=0;j--) for(int s=0;s<=1;s++) ans=max(ans,f[i][j][s]); return ans;}int main(){ freopen("in.txt","r",stdin); int cas=1; while(scanf("%d%d%d",&V1,&V2,&n)==3){ if(V1==0&&V2==0&&n==0)break; int a,b,c; numsp=0,numnorm=0; for(int i=0;i

转载于:https://www.cnblogs.com/arbitrary/archive/2012/08/25/2656616.html

你可能感兴趣的文章
html中 size和maxlength区别
查看>>
位运算和enum中的位运算
查看>>
浅谈面向对象的方法和属性
查看>>
我的github地址
查看>>
JSTL标签(核心标准库)
查看>>
MySQL 数据类型
查看>>
HDU 4893 线段树裸题
查看>>
转载的 Linux下chkconfig命令详解
查看>>
tomcat
查看>>
scrapy yield
查看>>
js中的this指针的用法
查看>>
[LeetCode] Remove Comments 移除注释
查看>>
[LeetCode] 902. Numbers At Most N Given Digit Set 最大为 N 的数字组合
查看>>
219. Contains Duplicate II
查看>>
解决键盘弹出底部导航被顶上来的bug。
查看>>
git SSH key
查看>>
nyist 17 -----动态规划DP--Accept
查看>>
Delphi 设置窗体无标题栏和边框
查看>>
sqlite3命令读出sqlite3格式的文件内容案例
查看>>
UK 更新惊魂记
查看>>