题意与分析

中文题就不讲题意了。我是真的菜,菜出声。

不妨思考一下,限制了我们决策的有哪些因素?一,所在的位置;二,所在的时间。还有吗?没有了,所以设dp[i][j]" role="presentation">dp[i][j]dp[i][j]为第i秒在j处的最大馅饼数,有:

dp[i][j]=dp[i][j]=max(dp[i−1][j−1],dp[i−1][j],dp[i−1][j+1])+f[i][j]" role="presentation">dp[i][j]=dp[i][j]=max(dp[i−1][j−1],dp[i−1][j],dp[i−1][j+1])+f[i][j]dp[i][j]=dp[i][j]=max(dp[i−1][j−1],dp[i−1][j],dp[i−1][j+1])+f[i][j]

是不是很显然?然后就去快乐做题了对不对?

你就会想:从小到大推还是从大到小推?

从大到小推。因为如果从小到大推,无法反映出一次只能移动一格的特性;相反,从大到小推只需要最后直接求dp[0][5]即可。

这题说明了对于状态转移方程的思考一定要彻底,不能想当然。

代码

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <vector>
  5. #define MP make_pair
  6. #define PB push_back
  7. #define fi first
  8. #define se second
  9. #define ZERO(x) memset((x), 0, sizeof(x))
  10. #define ALL(x) (x).begin(),(x).end()
  11. #define rep(i, a, b) for (int i = (a); i <= (b); ++i)
  12. #define per(i, a, b) for (int i = (a); i >= (b); --i)
  13. #define QUICKIO \
  14. ios::sync_with_stdio(false); \
  15. cin.tie(0); \
  16. cout.tie(0);
  17. using namespace std;
  18. template<typename T>
  19. T read()
  20. {
  21. T tmp; cin>>tmp;
  22. return tmp;
  23. }
  24. int f[100005][12],dp[100005][12],n;
  25. int main()
  26. {
  27. QUICKIO
  28. while(cin>>n)
  29. {
  30. if(!n) break;
  31. ZERO(f); ZERO(dp);
  32. // dp[i][j] 第i秒在第j米处能获得的最多馅饼数目
  33. // dp[i][j] = max(dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1])+f[i][j]
  34. int maxsec=0;
  35. rep(i,1,n)
  36. {
  37. int x,y; cin>>x>>y;
  38. f[y][x]++;
  39. maxsec=max(y,maxsec);
  40. }
  41. // cout<<maxsec<<endl;
  42. per(i,maxsec-1,0)
  43. {
  44. //cout<<i<<":\n";
  45. rep(j,0,10)
  46. {
  47. //if(i==1 && j<4 && j>6) continue;
  48. int maxans=-1;
  49. if(j-1>=0) maxans=max(f[i+1][j-1],maxans);
  50. maxans=max(f[i+1][j],maxans);
  51. if(j+1<=10) maxans=max(f[i+1][j+1],maxans);
  52. f[i][j]=maxans+f[i][j];
  53. }
  54. /*
  55. rep(j,0,10)
  56. {
  57. cout<<f[i][j]<<" ";
  58. }
  59. cout<<endl;
  60. */
  61. }
  62. cout<<f[0][5]<<endl;
  63. }
  64. return 0;
  65. }

「暑期训练」「基础DP」免费馅饼(HDU-1176)的更多相关文章

  1. 免费馅饼 HDU - 1176 基础dp

    /*题都是有一个状态转移方程式 , 只要推出方程式就问题不大了,首 先对于gameboy来说他下一秒只能 在0~10这十一个位置移动, 而对于1~9这九个位置来说他可以移动(假设他现在的位置为x)到x ...

  2. dp之免费馅饼

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. 「暑期训练」「基础DP」 Common Subsequence (POJ-1458)

    题意与分析 很简单:求最长公共子序列. 注意子序列与子串的差别:一个不连续一个连续.一份比较好的参考资料见:https://segmentfault.com/a/1190000002641054 状态 ...

  4. 「暑期训练」「基础DP」FATE(HDU-2159)

    题意与分析 学习本题的时候遇到了一定的困难.看了题解才知道这是二重背包.本题的实质是二重完全背包.二维费用的背包问题是指:对于每件物品,具有两种不同的费用,选择这件物品必须同时付出这两种代价:对于每种 ...

  5. 「暑期训练」「基础DP」 Monkey and Banana (HDU-1069)

    题意与分析 给定立方体(个数不限),求最多能堆叠(堆叠要求上方的方块严格小于下方方块)的高度. 表面上个数不限,问题是堆叠的要求决定了每个方块最多可以使用三次.然后就是对3n" role=& ...

  6. 「暑期训练」「基础DP」 Piggy-Bank (HDU-1114)

    题意与分析 完全背包问题. 算法背包九讲里面都有提到过,我自己再说下对完全背包的理解. 为什么01背包中遍历状态从VV到00?考虑一下基本方程$dp[i][j]=max(dp[i-1][j-w[i]] ...

  7. 「暑期训练」「Brute Force」 Bitonix' Patrol (CFR134D1D)

    题意 有n" role="presentation">nn个站点,排成圆形,每站间距m" role="presentation"> ...

  8. 「暑期训练」「Brute Force」 Multiplication Table (CFR256D2D)

    题意 给定一矩阵M" role="presentation">MM,Mij=ij" role="presentation">Mi ...

  9. 「暑期训练」「Brute Force」 Optimal Point on a Line (Educational Codeforces Round 16, B)

    题意 You are given n points on a line with their coordinates $x_i$. Find the point x so the sum of dis ...

随机推荐

  1. PHP数组 转 对象/对象 转 数组

    /** * 数组 转 对象 * * @param array $arr 数组 * @return object */ function array_to_object($arr) { if (gett ...

  2. JSON数据转换之net.sf.json包的使用

    转载 解析json之net.sf.json https://blog.csdn.net/itlwc/article/details/38442667 一.介绍 使用之前需要导入的jar包: json- ...

  3. sublime text 插件及快捷键的使用

    安装插件准备步骤: 1.先安装管理插件,插件必备:package control 1.按ctrl+` 调出console 2.在底部代码行粘贴以下代码并回车: import urllib2,os;pf ...

  4. MacType 文字之美 – 让 Windows 字体更漂亮

    苹果的Mac系统总能让人眼前一亮,除了其精美的软件界面设计外,最重要是其文字显示效果(渲染方式)比 Windows 更加清晰锐利,阅读起来更加舒服.于是就有高手开发了一款叫 GDI++ 的字体渲染引擎 ...

  5. git上传下载代码操作

    提交代码实质上都要走这样的操作 " 本地代码 --> 本地服务器"  "本地服务器 --> 远程服务器" 其实小伙伴就记住两个词就好了. Commi ...

  6. Oracle特性总结

    最近开发项目使用了Oracle,根据总体架构一开始选择使用Mybatis,发现核心模块用Mybatis效率不够,切换到jdbc实现,效率大增.Oracle可是个庞然大物,特性多多,丝毫不能马虎,否则很 ...

  7. iOS:UICollectionView流式布局及其在该布局上的扩展的线式布局

    UICollectionViewFlowLayout是苹果公司做好的一种单元格布局方式,它约束item的排列规则是:从左到右依次排列,如果右边不够放下,就换一行重复上面的方式排放,,,,,   常用的 ...

  8. java8的新特性,Collections.sort(排序的List集合)的使用,对list封装Map里面的某个值进行排序

    --------------------------对简单list的排序---------------------------------- List<Integer> list = ne ...

  9. layui layer.open() 弹层开启后 Enter回车 遮罩层无限弹处理

    解决方案: 增加success回调及其内容 如下: layer.open({ title:'更新论坛信息', type: 1, skin: 'layui-layer-rim', area: ['500 ...

  10. foreach传值