Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

John的奶牛们计划要跳到月亮上去。它们请魔法师配制了P(1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,

但中间可以跳过一些药水不吃。每种药水有一个“强度”值 s ( 1 <= s <= 500 ),表示可以增强牛的跳跃能力。然而,药力的

作用却是交替相反方向起作用,也就是说:当第奇数次吃药时,牛获得跳的更高的能力,而第偶数吃药时,却降低了跳高能力

。在吃药前,牛的跳高能力当然为 0 。

每种药只能吃一次,开始时为第1次吃药。

请求出牛可能跳到的最高高度--最大跳跃能力。

【输入格式】

第一行:一个整数 P

下面P行:每行一个整数,表示按先后次序要吃的药水的“强度”。

【输出格式】

只一个整数,表示最大弹跳能力。

去掉第2、4两种药水,

样例处理方式:

吃药为:

7,1,8,3,6;

最终能力为:

7-1+8-3+6=17

Sample Input

8

7

2

1

8

4

3

5

6

Sample Output

17

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t046

【题意】

【题解】



设fij表示前i个药水中选择了奇偶性为j的个数的药的最大跳跃值。

0和1分别表示偶数和奇数

对于第i个药水,有选择它和不选两种结果。

选它的话,和前i-1个的奇偶性不同,不选它的,则一样。

        //选
f[i][0] = f[i-1][1]-a[i];
f[i][1] = f[i-1][0]+a[i];
//不选
f[i][0] = max(f[i][0],f[i-1][0]);
f[i][1] = max(f[i][1],f[i-1][1]);
//边界
f[1][0] = 0;//表示不选第一个
f[1][1] = h[1];//选第一个,变成奇数

搞出奇偶性为奇数和偶数的最大值就好。

第i个选择完之后,它选与不选只会对前i个造成影响。只要他做出了正确的选择,对后续就不会产生影响。



【完整代码】

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 15e4+100; int n;
int a[N],f[N][2]; void in()
{
rei(n);
rep1(i,1,n)
rei(a[i]);
} void do_dp()
{
f[1][0] = 0;
f[1][1] = a[1];
rep1(i,2,n)
{
//选
f[i][0] = f[i-1][1]-a[i];
f[i][1] = f[i-1][0]+a[i];
//不选
f[i][0] = max(f[i][0],f[i-1][0]);
f[i][1] = max(f[i][1],f[i-1][1]);
}
} void o()
{
printf("%d\n",max(f[n][0],f[n][1]));
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
in();
do_dp();
o();
return 0;
}

【t046】牛跳的更多相关文章

  1. 【noip模拟赛2】牛跳

    描述 John的奶牛们计划要跳到月亮上去.它们请魔法师配制了P(1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,但中间可以跳过一些药水不吃.每种药水有一个“强度 ...

  2. Divide and Conquer:River Hopscotch(POJ 3258)

     去掉石头 题目大意:一群牛在河上的石头上跳来跳去,现在问你如何通过去掉M个石头,使得牛跳过石头的最短距离变得最大? 这一题比较经典,分治法的经典,二分法可以很方便处理这个问题,我们只要明白比较函数这 ...

  3. Enum:Hopscotch(POJ 3050)

    跳格子 题目大意:牛像我们一样跳格子,一个5*5的方格,方格有数字,给牛跳5次,可以组成一个6个数字组合字符串,请问能组合多少个字符串? 题目规模很小,暴力枚举,然后用map这个玩具来检测存不存在就可 ...

  4. 《挑战程序设计竞赛》2.1 穷竭搜索 POJ2718 POJ3187 POJ3050 AOJ0525

    POJ2718 Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6509   Acce ...

  5. 2019中山纪念中学夏令营-Day2[JZOJ]

    博客的开始,先聊聊代码实现: 每次比赛以后,要有归纳错误的习惯. 错误小结: 1.读入:scanf(“%c”)会读入回车和空格,但cin不会. 2.对于二维数组的输入,不能把m,n搞混了,会引起严重的 ...

  6. 普及C组第二题(8.2)

    1340. [南海2009初中]jumpcow(牛跳) (Standard IO) 题目: John的奶牛们计划要跳到月亮上去.它们请魔法师配制了 P (1 <= P <=150,000) ...

  7. 跳台阶 牛客网 剑指Offer

    跳台阶 牛客网 剑指Offer 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). class Solution: #ru ...

  8. 牛客网-《剑指offer》-变态跳台阶

    C++ class Solution { public: int jumpFloorII(int n) { <<--n; } }; 推导: 关于本题,前提是n个台阶会有一次n阶的跳法.分析 ...

  9. 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了

    链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...

随机推荐

  1. golang中包的初始化

    1.当一个go源程序被初始化时,首先去初始化所依赖的其他包,然后初始化该go源码文件的全局变量的初始化和执行初始化函数,其中该包所有的全局变量初始化在前,该包的初始化函数int在后.当所有包的初始化函 ...

  2. Sublime text2 常用插件

    很早就安装了这款软件,因为听说很NB.但是一直都是习惯用vim, 所以一直没有去学习它, 现在用用感觉确实很不错,所以找了些插件, 参考网址: http://www.hphq.net/Marketin ...

  3. Directx11教程(62) tessellation学习(4)

    原文:Directx11教程(62) tessellation学习(4)       现在看看四边形在不同tess factor时,四边形细分的细节,下图是tess factor1-8时候的细分.te ...

  4. Ubuntu官方源

    由于国内使用官方源导致下载速度慢等各方面原因,很多人将官方源替换成阿里源等,但是某些应用安装会报错.现将官方源分享如下: 备份当前源: 执行命令:# sudo cp /etc/apt/sources. ...

  5. 使用Velero Restic快速完成云原生应用迁移至ACK集群

    本文记录使用Velero Restic快速完成云原生应用迁移至ACK集群的实践过程. 0. 实践步骤概览 (1)创建GKE集群(或自建Kubernetes集群)(2)在GKE集群上部署示例应用Jenk ...

  6. KiCad EDA 镜像目录说明

    KiCad EDA 镜像目录说明 stable/ -- 稳定版安装包. testing/ -- 测试安装包. nightly/ -- 每日编译安装包. 5.1 版本的每日编译包,这个文件夹是重点,如果 ...

  7. JavaScriptBreak 语句 continue 语句

    break 语句用于跳出循环. continue 用于跳过循环中的一个迭代. Break 语句 我们已经在本教程之前的章节中见到过 break 语句.它用于跳出 switch() 语句. break ...

  8. Spring Security入门篇——标签sec:authorize的使用

    Security框架可以精确控制页面的一个按钮.链接,它在页面上权限的控制实际上是通过它提供的标签来做到的 Security共有三类标签authorize authentication accessc ...

  9. python 列表索引

  10. js+canvas五子棋人机大战ai算法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...