codeforces Walking in the Rain (dp 水题 线性 dp)


http://codeforces.com/problemset/problem/192/B

题意: 有 n 个地板 ,你可以 从 i 跳到 i +1 也可以 跳到 i + 2 ,我们的任务是 从 i 跳到 n 下雨了 ,每个 地板 有 能够 坚持的 天数 a[i] ,

求最多 多少天以后 我们 还可以 跳到 n 地板 。

题解: dp .

看到跳到 n 点的 有 两个点 n-1点 和 n - 2点 所以 我们 用 dp[i] 表示最长 dp[i]天 后 一样 能够 跳到 第 i 个点;

dp[i] = min(max(dp[i - 1],dp[i - 1]) ,a[i]) ;



1#include<cstdio>
2#include<cstring>
3#include<cmath>
4#include<iostream>
5#include<algorithm>
6#include<set>
7#include<map>
8#include<queue>
9#include<vector>
10#include<string>
11#defineMin(a,b)a<b?a:b
12#defineMax(a,b)a>b?a:b
13#defineCL(a,num)memset(a,num,sizeof(a));
14#definemaxn1100
15#defineeps1e-6
16#defineinf9999999
17#defineread()freopen("data.in","r",stdin);
18usingnamespacestd;
19inta[maxn];
20intdp[maxn];
21intmain()
22{
23intn,m;
24intans,i,j;
25//read();
26while(scanf("%d",&n)!=EOF)
27{
28for(i=0;i<n;i++)
29{
30scanf("%d",&a[i]);
31}
32
33for(i=0;i<n;i++)dp[i]=a[i];
34dp[1]=min(a[0],a[1]);
35for(i=2;i<n;i++)
36{
37dp[i]=min(max(dp[i-1],dp[i-2]),a[i]);
38
39}
40printf("%d\n",dp[n-1]);
41}
42} 优质内容筛选与推荐>>
1、用搜索引擎搜索我的名字 @_@
2、memcache和activemq使用连接,然后close
3、OCP/OCA Oracle 学习001
4、微信内置浏览器无法清除缓存问题
5、测试流程图(转载)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号