一百分做法,完全背包的运用

#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<cctype>
#include<iostream>using namespace std;
const int maxn=10009;
const int maxm=1009;
const int inf=0x3f3f3f3f;int n,m,k,X[maxn],Y[maxn],P[maxn],L[maxn],H[maxn],f[maxn][maxm];
bool b[maxn][maxn],g[maxn];int main()
{scanf("%d%d%d",&n,&m,&k);for (int i=0;i<n;i++)  scanf("%d%d",&X[i],&Y[i]);for (int i=0;i<=n;i++) L[i]=0,H[i]=m+1;for (int i=1;i<=k;i++){int x;scanf("%d",&x);scanf("%d%d",&L[x],&H[x]);g[x]=true;}int rt=0;for (int i=1;i<=n;i++){bool t=false;for (int j=1;j<=m;j++){f[i][j]=inf;if (j>X[i-1])f[i][j]=min(f[i][j],f[i-1][j-X[i-1]]+1);if (j>X[i-1])f[i][j]=min(f[i][j],f[i][j-X[i-1]]+1);}//1for (int j=m-X[i-1];j<=m;j++){f[i][m]=min(f[i][m],f[i-1][j]+1);f[i][m]=min(f[i][m],f[i][j]+1);}for (int j=L[i]+1;j<=H[i]-1;j++){if (j+Y[i-1]<=m) f[i][j]=min(f[i][j],f[i-1][j+Y[i-1]]);}//2for (int j=1;j<=L[i];j++) f[i][j]=inf;for (int j=H[i];j<=m;j++) f[i][j]=inf;for (int j=1;j<=m;j++) if (f[i][j]<inf){t=true;break;}if (!t) {printf("0\n%d",rt);return 0;}if (g[i]) rt++; }int ans=inf;for (int i=1;i<=m;i++) ans=min(f[n][i],ans);printf("1\n%d",ans);return 0;
}

开始挑战 飞扬的小鸟

本来想做70分数据,结果得了85分,不过debug的时间太长了,好几个(非常多)的细节没有考虑到,还好调试功能好用

</pre><pre name="code" class="cpp">#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<cctype>
#include<iostream>using namespace std;
const int maxn=10009;
const int maxm=1009;
const int inf=0x3f3f3f3f;int n,m,k,X[maxn],Y[maxn],P[maxn],L[maxn],H[maxn],f[maxn][maxm];
bool b[maxn][maxn],g[maxn];
bool check(int i,int j)
{if (j<=0||j>m) return false;if (b[i][j]) return false;return true;//当时忘记在最后加 return true了
}
int main()
{scanf("%d%d%d",&n,&m,&k);for (int i=0;i<n;i++)  scanf("%d%d",&X[i],&Y[i]);for (int i=1;i<=k;i++){scanf("%d%d%d",&P[i],&L[i],&H[i]);for (int j=0;j<=L[i];j++) b[P[i]][j]=true;for (int j=H[i];j<=m;j++) b[P[i]][j]=true;g[P[i]]=true;}int rt=0;for (int i=1;i<=n;i++){bool t=false;for (int j=1;j<m;j++)if (check(i,j)){f[i][j]=inf;if (check(i-1,j+Y[i-1]))f[i][j]=f[i-1][j+Y[i-1]];int l=1;while (j-l*X[i-1]>0) {if (check(i-1,j-l*X[i-1])) f[i][j]=min(f[i][j],f[i-1][j-l*X[i-1]]+l);l++;}//这一块没有加l++,然后没有考虑好细节if (f[i][j]!=inf) t=true;}f[i][m]=inf;if (check(i,m)) for (int j=m;j>0;j--)if (check(i-1,j)){int l;if ((m-j)%X[i-1]==0) l=(m-j)/X[i-1];else l=(m-j)/X[i-1]+1;if (j==m) l=1; f[i][m]=min(f[i][m],f[i-1][j]+l);}if (f[i][m]!=inf) t=true;//以上都是没有考虑,高度为m时的情况if (!t) {printf("0\n%d",rt);return 0;}//不可行的情况输出if (g[i]) rt++; }int ans=inf;for (int i=1;i<=m;i++) ans=min(f[n][i],ans);printf("1\n%d",ans);//有答案的情况输出return 0;
}

noip2014飞扬的小鸟相关推荐

  1. NOIP2014 飞扬的小鸟

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

  2. [NOIP2014]飞扬的小鸟

    思路{ 对于每一列,小鸟或下落,或上升.那我们很容易想到对应的背包问题! 按照完全背包的思想更新上升部分,01背包的方法更新下降部分. 撞到柱子了(aluba......aluba......)不慌, ...

  3. [noip2014] 飞扬的小鸟

    题目描述: 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为n,高 为m的二维平面,其中有k个管道(忽略管道的宽度). 小鸟始终在游戏界面内移动.小鸟从游戏界面最左边任意整数高度位置 ...

  4. NOIP2014 飞扬的小鸟 题解

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

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

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

  6. P1941 [NOIP2014 提高组] 飞扬的小鸟

    题目来源 [NOIP2014 提高组] 飞扬的小鸟 - 洛谷 题目考点 动态规划,dp    枚举,暴力    背包 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点 ...

  7. 【NOIP2014】飞扬的小鸟 背包dp

    UOJ[NOIP2014]飞扬的小鸟 背包dp codevs 3729 飞扬的小鸟 苟且抄DQS代码. 题解都在代码注释中-- #include <cstdio> #include < ...

  8. P1941 [NOIP2014 提高组] 飞扬的小鸟——解题报告

    一.题目链接: P1941 [NOIP2014 提高组] 飞扬的小鸟 二.题目大意 游戏界面是一个长为nnn,高为mmm的二维平面,其中有kkk个管道(忽略管道的宽度).小鸟始终在游戏界面内移动.小鸟 ...

  9. C++——NOIP提高组——飞扬的小鸟

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

最新文章

  1. Spark和Hadoop,孰优孰劣?
  2. 浅谈AJAX基本实现流程
  3. c#自动向网页Post信息并提取返回的信息
  4. TF之AE:AE实现TF自带数据集数字真实值对比AE先encoder后decoder预测数字的精确对比—daidingdaiding
  5. Intent七在属性之一:ComponentName
  6. MVC日期格式化,后台使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期
  7. c语言实现路由功能,前端路由的两种实现方式,内附详细代码
  8. linux命令怎么查看文件时间排序,linux中ls命令按照文件大小排...-ls命令按大小与时间排序文件...-ls按时间排序输出文件列表的实例分析_169IT.COM...
  9. TensorFlow 教程 --进阶指南--3.8使用GPU
  10. Redis学习总结(18)——Redis 常见的使用场景汇总
  11. Ubuntu 14 如何解压 .zip、.rar 文件
  12. 年底绝对不能犯的四个职场错误
  13. 使用spring ioc基于纯xml配置模拟crud
  14. 基于java的药品管理系统_基于Java药品管理系统
  15. 深入浅出MySQL全文 下载
  16. Windows 7的中国DNA
  17. 程序猿郭小喵曾经的实习故事
  18. 手把手教你做html日历
  19. 从vue项目简单了解什么是SSR
  20. shell编程(二)

热门文章

  1. 脑波和眼动连通性分析 python-(2)
  2. 微信公众号怎么生成带参数的二维码?
  3. Linux 操作系统原理 — PCIe 总线标准
  4. 艾永亮超级产品:企业管理者对企业发展起到什么作用?
  5. 登陆id显示无法连接服务器失败,无法连接id服务器失败怎么办
  6. [GridView]解决js-xlsx导出Excel时数字太长变为科学计数的问题
  7. 终极计算机配置要求,《看门狗》PC版终极配置要求 i7+GTX780+8G包爽
  8. 想拿互联网大厂的前端offer, 除了技术,你还差什么?
  9. SAP结帐操作详细操作指南
  10. 结构体在cuda核函数里面不能用吗_求职招聘 | 面试机器学习职位,这些知识点你都会了吗?...