http://172.20.6.3/Problem_Show.asp?id=1445

很容易看出来动态规划的本质,但是之前写的时候被卡了一下(不止一下),还是写一下题解。

直接暴力O(n*m^2)大概是70分,比较划算。

100分需要对上升下降方式找规律然后优化到O(nm);

可以看出,70分算法有很多时间浪费在没必要的上升计算上,为了减少上升计算,我们可以在预处理后把上升计算变为只有一次。

把下降的放在最后处理。

观察可以发现f[i][x]的赋值只可能来自于下面升上来的,其实本质就是一个有一点特殊的完全背包,然后背包处理就可以了。(不一定要像我那样写的,我觉得其实有更好看更容易懂的写法)

最后再处理一个下降的方案比较后赋值。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<iostream>
  6. using namespace std;
  7. const int maxn=;
  8. int n,m,k;
  9. int a[maxn][]={};
  10. int f[maxn][]={},g[]={};
  11. int d[maxn]={};
  12. struct nod{
  13. int p,l,h;
  14. }e[maxn];
  15. bool mmp(nod aa,nod bb){
  16. return aa.p<bb.p;
  17. }
  18. int main(){
  19. //freopen("wtf.in","r",stdin);
  20. scanf("%d%d%d",&n,&m,&k);
  21. for(int i=;i<=n;i++){
  22. scanf("%d%d",&a[i][],&a[i][]);
  23. }
  24. for(int i=;i<=k;i++){
  25. scanf("%d%d%d",&e[i].p,&e[i].l,&e[i].h);
  26. }sort(e+,e++k,mmp);
  27. for(int i=;i<=k;i++){
  28. d[e[i].p]=i;
  29. }
  30. memset(f,,sizeof(f));
  31. int ans=f[][],cnt=f[][];
  32. for(int i=;i<=m;i++)f[][i]=;
  33. int w=;
  34. for(int i=;i<n;i++){
  35. int mi=,ma=m;
  36. if(d[i]){
  37. mi=e[d[i]].l+,ma=e[d[i]].h-;
  38. }
  39. int ff=;
  40. memset(g,,sizeof(g));
  41. for(int j=mi;j<=ma;j++){
  42. g[j]=f[i][j];
  43. if(f[i][j]!=cnt)ff=;
  44. }
  45. for(int j=;j<=m;j++){
  46. int x=min(m,a[i+][]+j);
  47. g[x]=min(g[x],g[j]+);
  48. }
  49. for(int j=;j<=m;j++){
  50. int x=min(m,a[i+][]+j);
  51. f[i+][x]=min(f[i+][x],g[j]+);
  52. }
  53. for(int j=mi;j<=ma;j++){
  54. if(j-a[i+][]>) f[i+][j-a[i+][]]=min(f[i+][j-a[i+][]],f[i][j]);
  55. }
  56. if(!ff){
  57. printf("0\n%d\n",w);
  58. return ;
  59. }
  60. if(d[i])w++;
  61. }
  62. for(int i=;i<=m;i++){
  63. ans=min(ans,f[n][i]);
  64. }
  65. printf("1\n%d\n",ans);
  66. return ;
  67. }

JZYZOJ1445 [noip2014day1-T3]飞扬的小鸟 动态规划 完全背包的更多相关文章

  1. NOIP 2014 Day1 T3飞扬的小鸟

    题目描述:http://codevs.cn/problem/3729/ 表示各种shabi的我编和调了半天,思路大体就是一个完全背包的模型,不过会多一些额外的转移(因为题目限制高度之类的),不过值得注 ...

  2. vijos1907[noip2014]飞扬的小鸟(完全背包)

    描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...

  3. Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)

    Luogu 1941 [NOIP2014]飞扬的小鸟 (动态规划) Description Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度 ...

  4. P1907飞扬的小鸟

    P1907飞扬的小鸟 描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或 ...

  5. Codevs 3729==洛谷P1941 飞扬的小鸟

    P1941 飞扬的小鸟 456通过 2.4K提交 题目提供者该用户不存在 标签动态规划2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 Flappy Bird 是一 ...

  6. Codevs 3729 飞扬的小鸟

    飞扬的小鸟 标签 动态规划 NOIp提高组 2014 难度 提高+/省选- 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小 ...

  7. luogu 1941 飞扬的小鸟

    这道题对于第13个数据点,不知为什么f数组第二位开到2000以下就不能过,求指教 飞扬的小鸟 传送门 题目大意 一个小鸟在\(n*m\)的方阵里,然后有许多管道你们玩过就不多介绍了,然后每一个位置,点 ...

  8. [codevs3729]飞扬的小鸟

    [codevs3729]飞扬的小鸟 试题描述 输入 输出 输出文件名为 bird.out. 共两行. 第一行,包含一个整数,如果可以成功完成游戏,则输出 1,否则输出 0. 第二行,包含一个整数,如果 ...

  9. NOIP2014 飞扬的小鸟

    3. 飞扬的小鸟 (bird.cpp/c/pas) [问题描述] Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的 ...

随机推荐

  1. 【BZOJ】1500: [NOI2005]维修数列

    [算法]splay [题解]数据结构 感谢Occult的模板>_<:HYSBZ 1500 维修数列 #include<cstdio> #include<cctype> ...

  2. VMware 12安装虚拟机Mac OS X 10.10不能上网问题

    1:从本机中选择打开连接网络,选择本地连接.如果是无线网可以选择无线网. 1:  2: 控制面板--->网络和共享中心 2:选择属性,点击共享按钮. 3:将internet连接共享下面选项都选中 ...

  3. Java爬取网易云音乐民谣并导入Excel分析

    前言 考虑到这里有很多人没有接触过Java网络爬虫,所以我会从很基础的Jsoup分析HttpClient获取的网页讲起.了解这些东西可以直接看后面的"正式进入案例",跳过前面这些基 ...

  4. [device tree] interrupt mapping example

    This is for Devicetree Specification Release 0.1 Interrupt Mapping Example p19 在講解前,先帶進一些 PCI 的基礎觀念 ...

  5. 刷新SqlServer数据库中所有的视图

    ALTER PROCEDURE sp_refallview AS --刷新所有视图 DECLARE @ViewName VARCHAR(MAX); DECLARE @i INT; ; DECLARE ...

  6. Linux命令--more

    more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...

  7. FineReport——笔记

    1填报分页:需要在填报预览下的链接后添加:&__cutpage__=v:

  8. FineReport——JS二次开发(CSS改变控件样式)

    FR提供一些选择器,可以改变部分控件的样式,那么对于如何书写自己的css: 可以自己写css文件导入,也可以在页面加载结束事件中添加JS方法来改变css样式. 以文本框为例: 书写css文件,保存至% ...

  9. WdatePicker做出onchange效果

    WdatePicker({onpicking: function (dp) {if (dp.cal.getDateStr() != dp.cal.getNewDateStr()) { Func(dp. ...

  10. LCT 文档

    file:///C:/Users/Frank/Downloads/QTREE%E8%A7%A3%E6%B3%95%E7%9A%84%E4%B8%80%E4%BA%9B%E7%A0%94%E7%A9%B ...