题意:链接

方法: 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 2708: [Violet 1]木偶

    最优策略一定可以把整个序列分成几段,每一段都是像这样子的 红线表示不可匹配. 所以可以排序后dp[i]表示前i个数最多删掉多少=max(f[j-1]+cal(j,i)) cal(j,i)表示j到i最多 ...

  2. [数位DP] BZOJ 2713 [Violet 2]愚蠢的副官 BZOJ 1183 [Croatian2008]Umnozak

    官方题解 The first observation we can make is that, for all positive integers x x, the digit-product p(x ...

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

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

  4. BZOJ 2708 木偶

    #include <bits/stdc++.h> using namespace std; const int N=55; int n; int a[N],f[N];inline bool ...

  5. BZOJ 2133 切割(树形DP,树上背包)大概是本题全网第一篇题解 >_<【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ 2133 切割这道题全网搜不到任何一篇题解 >_< 看评测记录也没有几个人AC- ...

  6. [Luogu P4168] [BZOJ 2724] [Violet]蒲公英

    洛谷传送门 BZOJ传送门 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也 ...

  7. bzoj 4455: [Zjoi2016]小星星 树形dp+容斥原理

    题意 给出一棵树和一个图,问有多少种方法把树的节点标号使得其在改图中至少有一棵生成树与原来的树是重构的. n<=17 分析 想到了容斥,但是没想到从哪里容斥... 显然题目给了两个限制,一个是原 ...

  8. BZOJ 2999 inint【数DP优化】(Ender的模拟赛)

    题目描述 从起点1开始,每次选择当前数的任意一位上加上去,问得到n的最小步数以及方案数.多组数据. 例如,从1开始得到100,有很多方法,其中有下面两种方式: A. 1-2-4-8-16-17-18- ...

  9. bzoj 1040: [ZJOI2008]骑士 树形dp

    题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3054  Solved: 1162 [Submit] ...

最新文章

  1. ABAP中的系统变量SY-INDEX与SY-TABIX
  2. Gradle入门:依赖管理
  3. 科目三道路考试技巧流程详解
  4. mysql system_time_zone乱码_解决mysql设置时区时的错误Unknown or incorrect time zone: 'Asia/Shanghai'...
  5. 如何在Swiper内制作CSS3动画效果
  6. 分享12个Python项目教程,看完随便拿!
  7. 如何查看steam游戏销量_如何查看您在Steam游戏上花费的金钱和时间
  8. 差分 线宽 线距_需要做阻抗的信号线时应该怎样计算线宽、线距规则?
  9. html顺势正旋转360度,庞明:混元太极揉球
  10. 【日志】ubuntu16.04连接不上Logitech M590蓝牙鼠标(亲测可用)
  11. 基于SSM+Vue的邮票管理系统的设计与实现Java邮票分享系统邮票鉴定前后端分离(源码调试+讲解+文档)
  12. Excel如何设置下拉选项
  13. Linux命令之timeout
  14. 生活随笔与读书笔记20140302
  15. Daisy Chains
  16. Python:实现一个Pangram字符串至少包含一次所有字母算法(附完整源码)
  17. IAP 与 STC 的区别
  18. 计算机毕业设计、课程设计、实战项目之[含论文+源码等]SSM网上水果生鲜超市商城|电商系统[包运行成功]
  19. Svg 图标转换成Wpf path Geometry
  20. arm裸机【5】 --- 反汇编介绍

热门文章

  1. C# 二进制数据、图片存入、读出 sql server 数据库
  2. 我的Google Analytics(分析)正式通知升级到新版本
  3. VMware 克隆多个centos 7 操作系统
  4. 常用的Oracle命令整理
  5. Linux磁盘分区详解(parted)
  6. 04-10 swagger 接口管理体系
  7. linux 测试网络端口通不通_【干货】网络中的各种互通与不通
  8. Ubuntu服务器修复,ubuntu – 服务器攻击,如何修复它
  9. 有哪些必看的前端 JS 库?
  10. php案例纠错,PHP编程纠错指南