LINK:Select Half

考试的时候调了一个小时给调自闭了 原来是dp的姿势不太对。

首先 容易发现 奇数最多空2个位置 偶数最多空1一个位置 然后 设f[i][j][k]表示第i个数选了没有j 且当前用了k个空位的最大值。

然后把自己给dp迷了 最后发现选的数量无法固定所以 这个dp崩了。

考虑贪心不难发现偶数最多有两个空位连在一起 这个可以暴力枚举 奇偶性直接拿。

奇数 可以三个空位连在一起 或者 有4个不相邻的空位 存在。

前者可以暴力枚举 后者需要一些诡异的操作 最后发现前后缀和出现了点边界问题 导致GG.

最终还是选择dp.

说是姿势不对的原因是 j这维没啥用 直接利用i-2转移即可 那么有状态 f[i][j]表示前i个数当前用了j个空位的最大值。

一些状态转移不再赘述。

最后点一下细节 可以发现但是偶数时f[n][0],f[n][1],f[n-1][0]都可能作为答案。

为奇数的时候 可以发现f[n][2],f[n][1],f[n-1][1],f[n-1][0],f[n-2][0]都可以作为答案。

可以发现上述状态都是选择了n/2个数字的。

const ll MAXN=200005;
ll n;
ll a[MAXN];
ll f[MAXN][3];//f[i][j]前表示前i个数用掉j个空隙的最大值.
signed main()
{
freopen("1.in","r",stdin);
get(n);
rep(1,n,i)get(a[i]);
memset(f,0xcf,sizeof(f));
f[0][0]=0;f[1][0]=a[1];
rep(2,n,i)
{
f[i][0]=f[i-2][0]+a[i];
if(i>=3)f[i][1]=max(f[i-3][0]+a[i],f[i-2][1]+a[i]);
if(i>=4)f[i][2]=max(f[i-4][0]+a[i],max(f[i-3][1]+a[i],f[i-2][2]+a[i]));
}
if(n&1)putl(max(max(f[n][1],f[n][2]),max(f[n-2][0],max(f[n-1][0],f[n-1][1]))));
else putl(max(f[n][1],max(f[n][0],f[n-1][0])));
return 0;
}

其实真的是要贪心的话虽然很繁杂但是也是可以做的。

ABC 162 F Select Half dp 贪心的更多相关文章

  1. ABC 158 F - Removing Robots dp 单调栈

    LINK:Removing Robots 没想到 自闭. 考虑了一个容斥 发现不合法方案难以计算. 就算可以计算也几乎是n^2的做法. 考虑dp 左边会对右边产生影响 所以考虑先dp右边的再考虑左边的 ...

  2. ABC 203 F - Weed (DP)

    ABC203F - Weed 题意转述 S t e v e \rm Steve Steve 和 A l e x \rm Alex Alex 正在下界( N e t h e r l e n d \rm ...

  3. F - Select Half dp

    题目大意:从n个数里边选n/2个数,问和最大是多少. 题解:这是一个比较有意思的DP,定义状态dp[i][1],表示选了第i个数的最优状态,dp[i][0]表示没有选第i个数的最优状态. 状态是如何转 ...

  4. F. Maximum Weight Subset(贪心or树形dp解法)

    题:https://codeforces.com/contest/1249/problem/F 题意:给一颗树,边权为1,节点有点权,问取到一个点集,俩俩之间路径超过k,是点权和最大 思路:贪心地取点 ...

  5. Educational Codeforces Round 61 F 思维 + 区间dp

    https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同 ...

  6. 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心

    题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  7. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...

  8. Codeforces 459E Pashmak and Graph:dp + 贪心

    题目链接:http://codeforces.com/problemset/problem/459/E 题意: 给你一个有向图,每条边有边权. 让你找出一条路径,使得这条路径上的边权严格递增. 问你这 ...

  9. BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...

随机推荐

  1. mac篇---iterm2的基本常用命令

    标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...

  2. 前端开发-css

    css: 是给html标签装饰的,变得更好看. 注释: 单行注释:/*注释内容*/ 多行注释:/* 注释内容 注释内容 注释内容 */ 通常我们在写css代码时也会用注释来划分区域(html代码多,同 ...

  3. docker自动化部署前端项目实战一

    docker自动化部署前端项目实战一 本文适用于个人项目,如博客.静态文档,不涉及后台数据交互,以部署文档为例. 思路 利用服务器node脚本,监听github仓库webhook push事件触发po ...

  4. 技术干货丨通过wrap malloc定位C/C++的内存泄漏问题

    摘要:用C/C++开发的程序执行效率很高,但却经常受到内存泄漏的困扰.本文提供一种通过wrap malloc查找memory leak的思路. 用C/C++开发的程序执行效率很高,但却经常受到内存泄漏 ...

  5. selenium:selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

    可用链接: 1.http://blog.csdn.net/heatdeath/article/details/71136174 2.https://www.cnblogs.com/yousuosiys ...

  6. 数据可视化基础专题(六):Pandas基础(五) 索引和数据选择器(查找)

    1.序言 如何切片,切块,以及通常获取和设置pandas对象的子集 2.索引的不同选择 对象选择已经有许多用户请求的添加,以支持更明确的基于位置的索引.Pandas现在支持三种类型的多轴索引. .lo ...

  7. Python之常用模块学习(二)

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  8. C#版本说明

    语言版本 发布时间 .NET Framework要求 Visual Studio版本 C# 1.0 2002.1 .NET Framework 1.0 Visual Studio .NET 2002 ...

  9. 深入浅出ReentrantLock源码解析

    ReentrantLock不但是可重入锁,而且还是公平或非公平锁,在工作中会经常使用到,将自己对这两种锁的理解记录下来,希望对大家有帮助. 前提条件 在理解ReentrantLock时需要具备一些基本 ...

  10. ffplay源码编译

    ffplay是ffmpeg源码中一个自带的开源播放器组件,支持本地视频文件的播放以及在线流媒体播放,很多商业播放器都是基于ffplay定制而来的.ffplay中的代码充分利用了ffmpeg中的函数库, ...