题意:

id=2708">链接

方法: DP

解析:

这题太神辣。

做梦都没想到DP啊,反正我不会。


先谈一个我有过的错的想法。

最小费用最大流?

能匹配的边连费用为1的,不能匹配的连费用为0的

跑最小费用最大流

然而这显然是错的。我还思考半天。

由于这道题强制假设还用费用为1的边。那必须先跑费用为1的边。

这样就不符合辣

至于自己改下这个写法?

尝试过- -。然而卡在哪里呢?

一堆费用为1的边你先跑那个呢?- -评估?评估函数怎么写啊,我不会啊。

所以这个写法显然弃疗。


然而我还曾有过一个想法。

贪心?

对于每个值pi来说。我们统计一下Num,然后呢

我们来考虑拿最大的Num。最大的Num怎么拿呢?

让他没有匹配的对象,或是尽可能的使他能匹配的对象都跟别人匹配。然后Num-他还能匹配的对象就是这一轮操作的答案。

每匹配一次更新一遍,直到Num都为0

只是这正确性有点可怜…

总感觉是错的。

好像上一个方法的错误部分就能卡住这个?

应该吧,反正我没实现。

但总感觉贪心有路子,可是我不会啊。


正解

正解好神并且好简洁啊。

排一下序

然后设f[i]为前i个最多扔多少个。

f[i]=max(f[j],cal(j+1,i))

这个cal是什么呢

我们枚举能扔多少个。

然后验证,

并且验证的时候是依照什么样子匹配呢?

有序之后就这么匹配即可辣

正确性?不会证明啊,应该看起来是对的

复杂度?n这么小谈什么复杂度。


15.10.27 Update:

对于例子 1 2 3 3 4 5的解释。

假设依照上述分段的思想。

可能会这样匹配

1 2 3 3 4 5

2 3 1 4 5 3

这种话。木偶会剩下 3 5。而提线剩下1 3。还能够继续匹配。

并不符合上述解法。

事实上仅仅在于一个点上-》就是不同的段上的匹配方式是互逆的。

1 2 3

2 3 1 依照这种方式。

3 4 5

5 3 4 仅仅要是上一段的逆序匹配即可,就不会出现矛盾的情况。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 55
using namespace std;
int f[N];
int a[N];
int n;
int cal(int x,int y)
{
for(int k=1;k<=y-x+1;k++)
{
for(int j=x;j<=y-k;j++)
if(abs(a[j]-a[j+k])>1)return k-1;
if(abs(a[x+k-1]-a[y-k+1])<=1)return k-1;
}
return y-x+1;
}
int main()
{
while(~scanf("%d",&n))
{
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
for(int j=0;j<i;j++)
f[i]=max(f[i],f[j]+cal(j+1,i));
printf("%d\n",f[n]);
}
}

BZOJ 2708 [Violet 1]木偶 DP的更多相关文章

  1. 二分+最短路判定 BZOJ 2709: [Violet 1]迷宫花园

    BZOJ 2709: [Violet 1]迷宫花园 Sample Input 5 ######### # # # # # # # #S# # ##### # # ## # # # ### ### ## ...

  2. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

  3. [BZOJ 4332] [JSOI2012]分零食(DP+FFT)

    [BZOJ 4332] [JSOI2012]分零食(DP+FFT) 题面 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\ ...

  4. BZOJ 2720 [Violet 5]列队春游 ——期望DP

    很喵的一道题(我可不是因为看了YOUSIKI的题解才变成这样的) $ans=\sum_{x<=n}\sum_{i<=n} iP(L=i)$ 其中P(x)表示视线为x的概率. 所以只需要求出 ...

  5. BZOJ2708 [Violet 1]木偶

    首先想到的是贪心...肯定不对嘛...T T 然后发现其实是可以DP的...不过我们要先排序 令f[i]表示前i个木偶最坏要丢掉几个,则 f[i] = max(f[j] + calc(j + 1, i ...

  6. [BZOJ 1025] [SCOI2009] 游戏 【DP】

    题目链接:BZOJ - 1025 题目分析 显然的是,题目所要求的是所有置换的每个循环节长度最小公倍数的可能的种类数. 一个置换,可以看成是一个有向图,每个点的出度和入度都是1,这样整个图就是由若干个 ...

  7. BZOJ.1535.[POI2005]SZA-Template(KMP DP)

    BZOJ 洛谷 \(Description\) 给定一个字符串\(s\),求一个最短的字符串\(t\)满足,将\(t\)拼接多次后,可以得到\(s\).拼接是指,可以将\(t\)放在当前串的任意位置, ...

  8. BZOJ.4818.[SDOI2017]序列计数(DP 快速幂)

    BZOJ 洛谷 竟然水过了一道SDOI!(虽然就是很水...) 首先暴力DP,\(f[i][j][0/1]\)表示当前是第\(i\)个数,所有数的和模\(P\)为\(j\),有没有出现过质数的方案数. ...

  9. BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...

随机推荐

  1. rest_framework 解析器(下 全局配置使用)

    解析器 一般都是全局设置 参考文档 www.cnblogs.com/wupeiqi/articles/.html REST_FRAMEWORK=( "DEFAULT_PARSER_CLASS ...

  2. es6 --- class 类的继承使用

    传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...

  3. MySql系列表之间的关系

    foreign key 快速理解foreign key   员工信息表有三个字段:工号  姓名  部门 公司有3个部门,但是有1个亿的员工,那意味着部门这个字段需要重复存储,部门名字越长,越浪费 数据 ...

  4. laravel中soapServer支持wsdl的例子

    最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了"百度"和"谷歌"两个老师后,结合了多篇文档内容后,终于 ...

  5. Maven学习总结(21)——Maven常用的几个核心概念

    在使用Maven的过程中,经常会遇到几个核心的概念,准确的理解这些概念将会有莫大的帮助. 1. POM(Project Object Model)项目对象模型 POM 与 Java 代码实现了解耦,当 ...

  6. BZOJ——T 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛

    http://www.lydsy.com/JudgeOnline/problem.php?id=1612 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1 ...

  7. vmware下ubuntu的网络配置

    捣弄了vmnet0和vmnet8连接后,ubuntu上不了网了,今天突然解决了这个问题. 打开vmware后,点编辑-->虚拟网络编辑器 这里我使用的是NAT模式,所以要修改vmnet8 点vm ...

  8. Vmware qemu-kvm 虚拟化測试

    [root@kvm1 cloud]# lsmod | grep kvm kvm_intel 55496 3 kvm 337772 1 kvm_intel [root@kvm1 cloud]# egre ...

  9. [Poi] Build and Analyze Your JavaScript Bundles with Poi

    Ever wonder where those extra KB in your bundle are coming from? This lesson walks you through runni ...

  10. [Python] Accessing Array Elements

    NumPy Reference: Indexing Note: Indexing starts at 0 (zero). def slicing(): a = np.random.rand(5,4) ...