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. 新手用Python运行selenium的常见问题

    1.更换Python版本 打开pycharm,点击 file——setting——project项目名——project Interpreter,点击右侧的设置,如下图 选择新Python版本的安装路 ...

  2. 结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot

    本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值 在使用spring框架的项目中,@Value是经常 ...

  3. day24 常用模块(下)

    目录 一.logging模块 1 日志级别 2 默认级别为warning,默认打印到终端 3 为logging模块指定全局配置,针对所有的logger有效,控制打印到文件中 4.logging配置文件 ...

  4. web 部署专题(八):Nginx 反向代理中cookie相关问题

    问题3:认证问题 Domino服务器中,通过写了一些接口代码,提供RESTful的服务,来对手机端进行提供服务.但是由于原来的环境,没有SSO,而且不通过认证,没法访问到Domino里面的接口代码. ...

  5. 数据可视化之DAX篇(四) 熟练使用EARLIER函数,轻松获取当前行信息

    https://zhuanlan.zhihu.com/p/64400583 前面利用PowerBI做数据分析的时候都是对整列的字段进行操作,并没有做更细化的分析,比如分析数据的每一行.提取某一行的数据 ...

  6. It's time for Django

    本节内容 Django流程介绍 Django url Django view Django models Django template Django form Django admin Django ...

  7. [C#]正则表达式的基本用法

    C#正则表达式的基本用法 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个 ...

  8. Python数据分析实战:使用pyecharts进行数据可视化

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:刘早起 开始使用 基本套路就是先创建一个你需要的空图层,然后使用.s ...

  9. .NET 开源项目 StreamJsonRpc 介绍[下篇]

    阅读本文大概需要 9 分钟. 大家好,这是 .NET 开源项目 StreamJsonRpc 介绍的最后一篇.上篇介绍了一些预备知识,包括 JSON-RPC 协议介绍,StreamJsonRpc 是一个 ...

  10. css : 使用浮动实现左右各放一个元素时很容易犯的错误

    比如说,有一个div,我想在左侧和右侧各方一个元素. 如果不想用flex,那就只能用浮动了. ... <div class="up clearfix"> <h6& ...