link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3623

看起来像完全背包,但是物品价值是变化的,所以很多人搞的很复杂。

晚上的代码要么很复杂,有一个代码虽然很简洁在zoj可以过,但是是错误的。求教lyl神犇,果然思想很深刻,抓住乐问题的本质,想法比网上搜到的所有博客里面的做法都简洁。

事实上,就是简单的DP,抓住一个技巧:让时间倒流,也就是说,把时间反过来考虑,先在将来把船造好,然后在过去用船攻击,哈哈,太巧秒了,说起来很别扭,很有意思,dp[j+time[i]]=max(dp[j]+j*time[i]);dp[j]表示在j这个时间,所造成的最大伤害。这样就可以枚举时间,在每个特定的时间内,枚举船的种类,找到最大值。最终在dp[]数组里面找到符合条件的并且时间最少的解。

只能说,ORZ……

后来好不容易想明白了。茶具从哪里来……

  1. /*
  2. ID: zypz4571
  3. LANG: C++
  4. TASK: battle.cpp
  5. */
  6.  
  7. #include <iostream>
  8. #include <cstdio>
  9. #include <cstdlib>
  10. #include <cstring>
  11. #include <cmath>
  12. #include <cctype>
  13. #include <algorithm>
  14. #include <queue>
  15. #include <deque>
  16. #include <queue>
  17. #include <list>
  18. #include <map>
  19. #include <set>
  20. #include <vector>
  21. #include <utility>
  22. #include <functional>
  23. #include <fstream>
  24. #include <iomanip>
  25. #include <sstream>
  26. #include <numeric>
  27. #include <cassert>
  28. #include <ctime>
  29. #include <iterator>
  30. const int INF = 0x3f3f3f3f;
  31. const int dir[][] = {{-,},{,},{,-},{,},{-,-},{-,},{,-},{,}};
  32. using namespace std;
  33. int Time[],dam[], f[];
  34. int main ( int argc, char *argv[] )
  35. {
  36. #ifndef ONLINE_JUDGE
  37. freopen("in.txt", "r", stdin);
  38. #endif
  39. ios::sync_with_stdio(false);
  40. int n,l;
  41. while (~scanf("%d%d",&n,&l)){
  42. for (int i=;i<=n;++i) scanf("%d%d",Time+i,dam+i);
  43. memset(f,,sizeof(f)); f[]=;
  44. for (int j=;j<=;++j) {
  45. for (int i=;i<=n;++i) {
  46. f[j+Time[i]]=max(f[j+Time[i]],f[j]+j*dam[i]);
  47. }
  48. }
  49. int ans=INF;
  50. for(int i=;i<=;++i) {
  51. if(f[i]>=l&&ans>i) ans=i;
  52. }
  53. printf("%d\n",ans);
  54. }
  55. return EXIT_SUCCESS;
  56. } /* ---------- end of function main ---------- */

学算法重在理解,思考,而不是套模板什么的。理解了就不用记忆了。

比如这道题目,一看,就很想完全背包,然后就搞的很复杂的样子……

其实,这道题目还有一个比较聪明的解法,因为时间最多只有300+,所以我们可以枚举时间,二分答案,对每个时间判断是否合法就OK,判断的时候,按照时间正序排就行,lyl神犇给讲的,好吧,我不会写……

做完这道题目觉得动态规划很有意思。

zoj3623 Battle Ships ——完全背包?简单DP!|| 泛化背包的更多相关文章

  1. ZOJ3623:Battle Ships(全然背包)

    Battle Ships is a new game which is similar to Star Craft. In this game, the enemy builds a defense ...

  2. zoj3623 Battle Ships

    Battle Ships is a new game which is similar to Star Craft. In this game, the enemy builds a defense ...

  3. POJ 1947 - Rebuilding Roads 树型DP(泛化背包转移)..

    dp[x][y]表示以x为根的子树要变成有y个点..最少需要减去的边树... 最终ans=max(dp[i][P]+t)  < i=(1,n) , t = i是否为整棵树的根 > 更新的时 ...

  4. POJ 1155 - TELE 树型DP(泛化背包转移)..

    dp[x][y]代表以x为根的子树..连接了y个终端用户(叶子)..所能获得的最大收益... dp[x][ ]可以看成当根为x时..有个背包空间为0~m...每个空间上记录了到到达这个空间的最大收益. ...

  5. HDOJ 1561 - 树形DP,泛化背包

    刚看题...觉得这不是棵树...可能有回路...仔细一想..这还真是棵树(森林)...这是由于每个城堡所需要提前击破的城堡至多一个..对于一个城堡.其所需提前击破的城堡作为其父亲构图.... dp[k ...

  6. 01背包----简单DP

    描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 小Ho现在手上有M张奖券,而奖品区有N件奖品,分别标号为1到N,其中第i件奖品需要ne ...

  7. ZOJ 3623 Battle Ships DP

    B - Battle Ships Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Subm ...

  8. Battle Ships(复习泛化物品**)

    传送门Battle Ships Time Limit: 2 Seconds      Memory Limit: 65536 KB Battle Ships is a new game which i ...

  9. [ZOJ 3623] Battle Ships

    Battle Ships Time Limit: 2 Seconds      Memory Limit: 65536 KB Battle Ships is a new game which is s ...

随机推荐

  1. C++封装、继承、多态

    C++封装继承多态总结 面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重 ...

  2. struts2内Action方法调用

    1.struts2流程: jsp页面-->web.xml-->struts.xml-->user.acrion-->UserAction.java 中的execute()--r ...

  3. eclipse 工程乱码问题

    一 设置工作空间的编码格式(对新建的工程有效) window-->preference-->Gerneral-->Workspace-->Text file coding--- ...

  4. SharePoint 2013 开发——APP安全模型

    博客地址:http://blog.csdn.net/FoxDave 除非开启了SharePoint网站的匿名访问,否则对于入站的请求,必须要有一个身份验证的过程(Authentication),这个 ...

  5. ODI中的临时接口

    在ODI 11g及后续的版本中,针对复杂的ETL处理,可分解为多个步骤,在中间步骤中使用临时接口,而不用建立相应的物理表,ODI会在处理过程中自动创建和删除这些中间表,从而降低ETL处理复杂度:同时, ...

  6. 解密SQL SERVER 2005加密存储过程,函数

    在SQL SERVER 2005中必须用专用管理连接才可以查看过程过程中用到的表 EG:sqlcmd -A 1>use test 2>go 1>sp_decrypt 'p_testa ...

  7. The constness of a method should makes sense from outside the object

    C++的encapsulation机制使得我们可以使得一个类的逻辑接口和内部表示有很大的差异,比如下面这个矩形类: class Rectangle { public: int width() cons ...

  8. 并非然并卵的z-index

    最近做一些东西的时候总觉得加上z-index和不加对于最终的显示结果并没有什么区别,开始以为一张图片把z-inde的值调小一点儿,就可以当做背景图片一样使用,跟background是一样的,在试过几次 ...

  9. Python入门(三,初级)

    一,函数调用 定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构. 这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行. 如下实例调用了pr ...

  10. 51nod 最长公共子序列Lcs

    有深入 了解了一点 .  51nod 可以用来加深 算法理解程度 ,