HDU2159 研发费用背包
2015-10-26 08:25
288 查看
主题链接:FATE
状态转移方程:
dp[ren][num] =max(dp[ren-耐久值][num-1]+ 经验值,dp[ren][num])
dp表示:当前忍耐度ren下杀敌数为num的经验值
枚举分别枚举 全部怪物种类、耐久度、杀怪数
最后在从小到达枚举消耗的耐久度就可以
状态转移方程:
dp[ren][num] =max(dp[ren-耐久值][num-1]+ 经验值,dp[ren][num])
dp表示:当前忍耐度ren下杀敌数为num的经验值
枚举分别枚举 全部怪物种类、耐久度、杀怪数
最后在从小到达枚举消耗的耐久度就可以
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> const int INF = 1e7; using namespace std; int dp[105][105],cost[600][2]; int max(int x,int y) { if(x > y) return x; else return y; } int min(int x,int y) { if(x > y) return y; else return x; } int main() { int n,m,k,s; while(~scanf("%d%d%d%d",&n,&m,&k,&s)) { for(int i = 1;i<=k;i++) { scanf("%d%d",&cost[i][0],&cost[i][1]); } memset(dp,0,sizeof(dp)); int i,ren,num,ans = -1; for( i = 1;i<=k;i++) { for( ren = cost[i][1];ren<=m;ren++) { for( num = 1;num<=s;num++) { if(dp[ren][num] < dp[ren-cost[i][1]][num-1]+ cost[i][0]) dp[ren][num] = dp[ren-cost[i][1]][num-1] + cost[i][0]; } } } for(int i = 1;i<=m;i++) { if(dp[i][s] >=n) { ans = m - i; printf("%d\n",ans); break; } } if(ans ==-1) printf("%d\n",ans); } return 0; }
相关文章推荐
- Linux回收站管理
- 新建一个表
- (3)python运算符
- 使用调试生成配置!
- 5分钟实现VS2010整合NUnit进行单元测试
- 语法和语义错误!
- 第一章 基本语法-10循开关语句(switch case)
- 并发和并行的区别
- into outfile 生成sql脚本
- 洛谷月赛最后的狂欢 2038年问题
- Android 高级UI设计笔记06:仿微信图片选择器
- C++智能指针shared_array
- hdu1024 dp
- 监听view添加到父控件和自己添加子控件
- 10.14~10.25刷题(shui)记录
- ds报文测试桩
- LINUX设备驱动程序的注意事项(两)建设和执行模块
- CDH(Cloudera)版本的 Hadoop
- TypeScript学习笔记(六):泛型
- awr 无法生成处理