开坑!SHU1964 Level Up!(二维完全背包)坑已填
2015-12-24 23:39
218 查看
Description
Yaoge在玩游戏的时候遇到了一个问题,他现在需要升级,但是又不想浪费现有的能量点,因为升级之后能量点会回满,当前没用掉的就浪费了。已知现在剩余的能量点数 E,并且现在需要大于等于 M 点经验值才能升级。
现在有 N 个关卡,每个关卡可以打多次,这些关卡分别需要使用 Ai 点能量点打一次,能够获得 Bi 经验值,
同时关卡中可能出现稀有掉落,为了简化问题,按照稀有程度与掉落概率给每个关卡计算一个 Ci 作为通关一次获得的价值。
现在Yaoge想知道,在能量点足够使用,并且能够升级的前提下,能够最多获得多少价值?
(注意:如果通关一个关卡之后,获得经验值超过或等于升级所需经验值,就会立即升级)
Input
第一行有一个整数T,表示数据组数。(T <= 20)之后有T组数据,每组数据第一行有三个整数N,M,E,分别表示关卡个数、升级还需要的经验值、剩余能量点数。(1 <= N, M, E <= 100)
接下来有N行,每行有三个整数Ai, Bi, Ci,分别表示关卡需要的能量点,获得的经验值、关卡价值。
(1 <= Ai, Bi, Ci <= 100)
Output
对于每组数据,在一行中输出一个整数,表示在升级的前提下最大获得的价值。如果无论怎么样都不能升级,输出一行"Sad Yaoge!"
Sample Input
41 10 10
1 1 5
1 10 10
1 2 5
1 10 10
2 1 5
3 8 6
3 1 100
2 6 10
1 8 1
Sample Output
5025
Sad Yaoge!
111
排序+边界处理!
#include<iostream> #include<algorithm> #include<cstring> const int INF=0x3f3f3f3f; using namespace std; struct guanka { int A,B,C; }; bool cmp(guanka S1,guanka S2) { return S1.B<S2.B; } int main(void) { int i,j,k,t,n,m,e,dp[505][505]; guanka GK[505]; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&e); memset(dp,-INF,sizeof(dp)); for(i=1;i<=n;i++) scanf("%d%d%d",&GK[i].A,&GK[i].B,&GK[i].C); sort(GK+1,GK+1+n,cmp); dp[0][0]=0; for(k=1;k<=n;k++) for(i=0;i<m;i++) { for(j=0;j<e;j++) { dp[min(i+GK[k].B,m)][min(j+GK[k].A,e+1)]=max(dp[min(i+GK[k].B,m)][min(j+GK[k].A,e+1)],dp[i][j]+GK[k].C); } } int ans=-INF; for(i=0;i<=e;i++) ans=max(ans,dp[m][i]); if(ans<0) printf("Sad Yaoge!\n"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- Windows下小狼毫输入法(Rime)的安装与配置(含导入搜狗词库)
- 作品第二课----改变DIV任意属性的值
- 内存分析工具 MAT 的使用
- Vmware虚拟机主机共享文件
- jQuery.extend 函数使用详解
- hibernate学习(设计一对多 关系 映射)
- c语言项目总结
- keil MDK之RTX定时器组的API函数及应用
- 各位来帮我看看我编的二叉树的代码。
- iOS 基本图形的绘制 基于bitmap 位图
- 编程的智慧
- 在MySQL中设置外键约束
- IOS美图秀秀(滤镜和涂鸦)和 添加阴影功能
- sparkSQL中udf的使用
- 第二章 Spring MVC入门
- 如何启用Oracle EBS Form监控
- android 短信拦截器
- 独立日记 2015年12月24日 day3 平安夜
- 使用注解的Hibernate one-to-many映射
- Linux User's Manual IOSTAT