这题用贪心是很容易过的,直接先杀死对方单位时间输出较高的对象。

这题的动态规划解是将N个敌人压缩到一个int数里面,dp[j] 表示在剩余了j这个数里面所蕴含的敌人的情况下的最大扣血量。

dp方程为 dp[s] = min( dp[s - {bit}] + sumdps[s] * h[bit] ) 其中bit枚举每一位。

代码如下:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;int dp[1200000], N, h[30], dps[30], c[1200000], sum[1200000];// dp[j] 代表剩余j数字所含二进制位的敌人所扣的最少血量void dfs(int x, int num, int step, int tot)
{if (step == N) {c[x] = num;sum[x] = tot;return;}dfs(x<<1, num, step+1, tot);dfs(x<<1|1, num+1, step+1, tot+dps[N-step]);
}void DP()
{int lim = 1 << N;for (int i = N-1; i >= 0; --i) {for (int j = 0; j < lim-1; ++j) {if (c[j] == i) {for (int k = 0; k < N; ++k) {    if (!(j & (1<<k))) {dp[j] = min(dp[j], dp[j|(1<<k)] + sum[j|(1<<k)] * h[k+1]);}} }}}printf("%d\n", dp[0]);
}int main()
{while (scanf("%d", &N) == 1) {memset(dp, 0x3f, sizeof (dp));for (int i = 1; i <= N; ++i) {scanf("%d %d", &dps[i], &h[i]);}dfs(0, 0, 0, 0);dp[(1<<N)-1] = 0;DP();}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2012/07/27/2611040.html

HDU-4310 Hero 贪心Or动态规划相关推荐

  1. Dijkstra 贪心算法 动态规划

    我认为 Dijkstra算法 的本质是 广度优先搜索, 而此处的广度是定义在路程的cost之上的. (就好比从圆心处向外扩散一个圆环,首次碰到的就是最近) 动态规划泛指,重叠子问题与原问题的推算关系( ...

  2. 分治、贪心、动态规划的简单理解

    分治.贪心.动态规划都是要将问题划分为一个子问题,然后通过解决子问题进而求解最终问题 分治: 将问题分解为结构相似独立子问题,递归求解各个子问题,然后合并子问题的解来求解最终问题. 动态规划: 适用于 ...

  3. 数据结构与算法(二):排序(递归、回溯、数论、插入、希尔、归并、选择、冒泡、快排、贪心、动态规划)

    算法排序:递归.回溯.数论.插入.希尔.归并.选择.冒泡.快排.贪心.动态规划 数论思想:利用数学公式或者定理或者规律求解问题: 算法思想中最难的点:递归+动态规划:树论:二叉树,红黑树 思考题: 微 ...

  4. DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略

    DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...

  5. HDU 4310 贪心算法 C++版

    Problem - 4310 (dingbacode.com)https://acm.dingbacode.com/showproblem.php?pid=4310当然是先选择攻击值最高的打了,一开始 ...

  6. hdu 5248(二分+贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248 解题思路:这道题我原本的思路是动态规划,结果看到数很大,结果放弃了.然后想到二分,思路是对的,只 ...

  7. hdu 5246(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5246 解题思路:先排序,在采用贪心的方法,先给百小度找到合适的初始战斗力,找到比初始战斗力上限小的中最 ...

  8. HDU1257 最少拦截系统 贪心或动态规划

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. hdu 4296 Buildings (贪心)

    http://acm.hdu.edu.cn/showproblem.php?pid=4296 题意: 给出n个石板的重量w和它的承受能力s,将这n个石板累在一起,这样每个石板都有一个PDV = (Σw ...

最新文章

  1. C#中的委托,匿名方法和Lambda表达式
  2. 【杂谈】为什么有三AI自断财路,从来不接广告
  3. SpringBoot使用StringRedisTemplate操作Redis字符串
  4. PartnerSet in IBASE
  5. 了解SQL Server触发器及触发器中的事务
  6. android搜索文字变色_Android实现TextView字符串关键字变色的方法
  7. JS_typeof()函数返回类型总结
  8. 电子助力方向机控制模块_17款路虎揽胜:偶发性电子助力失效
  9. php 类自动执行,php类中的魔术方法及类的自动加载
  10. android中实现GPS定位功能,Android中实现GPS定位的简单例子
  11. 五种常用源代码开源协议
  12. 数字图像处理 冈萨雷斯(第四版)图像配准
  13. Word论文参考文献排版
  14. 35KV变电站及10KV供配电系统倒闸操作屏QY-PGD09
  15. python里创建数据库表Column常用参数总结
  16. 论文解读-通过建模时空动态生成活动轨迹
  17. 使用QT开发的简易音乐播放器
  18. 信息系统项目管理师必背核心考点(四十三)预期货币价值(EMV)
  19. 信号完整性分析-笔记
  20. 查看php安装路劲,如何查看php安装位置

热门文章

  1. luoguP1090 合并果子 (贪心+优先队列)
  2. Elasticsearch 2.3.0 重建索引
  3. 【工具】FormatUtil.ava 常用工具类
  4. ubuntu linux 使用常见问题
  5. CentOS 6.3下Apache+SVN部署Web版本同步
  6. Python——模拟轮盘抽奖游戏
  7. python socket send_全网最详细python中socket套接字send与sendall的区别
  8. Python接口自动化之数据驱动
  9. 报告:上周比特币基金流出9800万美元,ETH、ADA等投资需求上升
  10. 新泽西州男子因无牌运营比特币交易所或面临5年监禁