博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【NOIP2014】飞扬的小鸟
阅读量:5013 次
发布时间:2019-06-12

本文共 1946 字,大约阅读时间需要 6 分钟。

题解:首先设置一个状态dp[i][j]表示到达位置i高度为j的最小点击次数。

我们讨论一下:

在i-1为位置跳的情况----

(1)

cap[i][j]=min(cap[i][j],cap[i-1][j-up[i-1]]+1);//由i-1位置跳一次而来

cap[i][j]=min(cap[i][j],cap[i][j-up[i-1]]+1);//可以解决多次点击的叠加效果(自己理解一下)

(2)

for(int p=j-up[i-1];p<=m;p++)//当当前的高度为m时,显然可以由i-1位置的高度从j-up[i-1]到m到的状态转移过来

{
  cap[i][j]=min(cap[i][j],cap[i-1][p]+1);
  cap[i][j]=min(cap[i][j],cap[i][p]+1);
}

下落的情况------

for(int j=L[i]+1;j<=H[i]-1;j++)

{
  if(j+down[i-1]<=m)
    cap[i][j]=min(cap[i][j],cap[i-1][j+down[i-1]]);
}

以下是代码。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXN 10010#define LL long long intusing namespace std;const int INF=1e9;const int EPS=1e-8;struct node{ int l; int h; int w;}t[MAXN];int cap[10001][1001];//到达横坐标为i高度为j的地方的最小步数int n,m,k;int w[MAXN];int L[MAXN],H[MAXN];int up[MAXN],down[MAXN];int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); scanf("%d%d%d",&n,&m,&k); for(int i=0;i<=n-1;i++) scanf("%d%d",&up[i],&down[i]); for(int i=0;i<=n;i++) L[i]=0,H[i]=m+1; int p,l,h; for(int i=1;i<=k;i++) { scanf("%d%d%d",&p,&l,&h); t[i].w=p;t[i].l=l;t[i].h=h; w[p]=1; L[p]=l; H[p]=h; } for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) cap[i][j]=INF; cap[0][0]=INF; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(j>=up[i-1]) { cap[i][j]=min(cap[i][j],cap[i-1][j-up[i-1]]+1); cap[i][j]=min(cap[i][j],cap[i][j-up[i-1]]+1); } if(j==m) { for(int p=j-up[i-1];p<=m;p++) { cap[i][j]=min(cap[i][j],cap[i-1][p]+1); cap[i][j]=min(cap[i][j],cap[i][p]+1); } } } for(int j=L[i]+1;j<=H[i]-1;j++) { if(j+down[i-1]<=m) cap[i][j]=min(cap[i][j],cap[i-1][j+down[i-1]]); } for(int j=1;j<=L[i];j++) cap[i][j]=INF; for(int j=H[i];j<=m;j++) cap[i][j]=INF; } int ans=INF,tot=k; for(int i=n;i>=1;i--) { for(int j=L[i]+1;j<=H[i]-1;j++) if(cap[i][j]

 

转载于:https://www.cnblogs.com/Landlord-greatly/p/7268336.html

你可能感兴趣的文章
oo第三单元总结
查看>>
leetcode : Count and Say [基本功]
查看>>
洛谷 P2485 [SDOI2011]计算器 解题报告
查看>>
c#访问存储过程
查看>>
Slickflow.NET 开源工作流引擎基础介绍(三) -- 基于HTML5/Bootstrap的Web流程设计器
查看>>
Node教程
查看>>
java将字段映射成另一个字段,关于 接口传参 字段不对应转换
查看>>
Redis
查看>>
字段和属性的区别
查看>>
HTTP(一)工作机制
查看>>
条形码扫描枪数据读取的问题
查看>>
$this->autoRender = false
查看>>
健壮的 Java 基准测试
查看>>
zendoptimizer配置(转)
查看>>
phpstorm查看类的继承关系
查看>>
git create clone(仓库)
查看>>
chmod修改文件权限的命令
查看>>
新博客牵至简书
查看>>
矩阵求逆
查看>>
在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。...
查看>>