博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 789 C Functions again DP
阅读量:6895 次
发布时间:2019-06-27

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

  题目链接: http://codeforces.com/problemset/problem/789/C

  题目描述: 给定一个数列, 问从某项开始加一项减一项的最大值是多少

  解题思路: 先把数列分成两种情况, 一种是第一个正第二个负第三个正......  一种是第一个负第二个正第三个负...... DP求一个连续子序列最大和就可以了

  代码: 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const ll maxn = 1e5+10;ll a[maxn];ll b[maxn];ll c[maxn];ll d[maxn];ll solve( ll * p, ll len ) { ll ans = 0; ll cnt = 0; for( ll i = 1; i <= len; i++ ) { cnt += p[i]; if( cnt < 0 ) cnt = 0; else { if( cnt > ans ) ans = cnt; } } return ans;}int main() { ll n; scanf( "%lld", &n ); for( ll i = 1; i <= n; i++ ) { scanf( "%lld", a+i ); } for( ll i = 1; i <= n-1; i++ ) { b[i] = abs(a[i+1]-a[i]); } n--; for( ll i = 1; i <= n; i++ ) { if( i & 1 ) { c[i] = -b[i]; d[i] = b[i]; } else { c[i] = b[i]; d[i] = -b[i]; } } printf( "%lld\n", max(solve(c,n), solve(d, n))); return 0;}
View Code

  思考: 训练自己的代码能力与将问题抽象出来的能力

转载于:https://www.cnblogs.com/FriskyPuppy/p/7625206.html

你可能感兴趣的文章
织梦cms列表页{dede:list}标签实现按文章权重weight排序的方法
查看>>
jira部署,主机迁移,数据库迁移,jira
查看>>
众美集团携手万科物业 树立济南人居高标准
查看>>
形象比你的头衔更重要 看过悦嘉丽形象锻造营你就知道为什么
查看>>
Oracle 数据库导出数据泵(EXPDP)文件存放的位置
查看>>
组播中如何把广播流量转为组播流量
查看>>
ZooKeeper服务命令
查看>>
利用虚拟化实现应用发布与网络隔离
查看>>
redis两种调用方式实例
查看>>
我的友情链接
查看>>
oracle分区表
查看>>
(转载)centos6.5下安装mysql
查看>>
宽带用户防范“***”***十大招式
查看>>
PHP5.4第一天—基本语法
查看>>
thinkphp 5.0 index.php被替换成首页内容,被注入恶意代码
查看>>
Linux定制自动安装
查看>>
尝试搭建一个日志服务器
查看>>
android开源工程--开篇
查看>>
CentOS6上mongodb连接数无法突破1000的解决办法
查看>>
linux 修改 计算 名称 root@localhost
查看>>