题意

略。

\(\texttt{Data Range:}1\leq n\leq 80\)

题解

首先考虑初始状态怎么算答案。很明显直接数满足的不好数,用总的减去不满足的还比较好做。注意到所有不满足的是一段 \(0\),所以就没了。

然后考虑怎么算从一个初始状态转移到一个目标状态的步数。考虑邻项交换,发现肯定是贪心匹配最优。

所以说如果有一个目标序列的话那么就可以算出初始序列到这个序列的步数和这个序列的答案,于是就可以直接 DP 目标序列。(这个时候我们 DP 未被保护的对数的最小值)

设 \(f_{i,j,k}\) 表示当前考虑到第 \(i\) 位并且钦定这一位填 \(1\),移动了 \(j\) 次并且这一段前缀中有 \(k\) 个 \(1\) 时未被保护对数的最小值。实际上转移的话考虑枚举下一个 \(1\) 在哪里,这个时候可以算出中间一段 \(0\) 对答案的贡献和需要移动的步数,就能够转移了。

最后处理的时候枚举一下最终序列中最后一个 \(1\) 填的哪里就好了,时间复杂度 \(O(n^5)\)。由于我比较菜所以不会斜率优化做法。

代码

#include<bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long long int li;
const ll MAXN=85;
ll n,tot,res,m,r,c;
ll x[MAXN],cnt[2],pos[MAXN],f[MAXN][MAXN*MAXN][MAXN];
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
inline void chkmin(ll &x,ll y)
{
x=x<y?x:y;
}
inline ll binom(ll n)
{
return n*(n-1)/2;
}
int main()
{
m=binom(n=read());
for(register int i=1;i<=n;i++)
{
cnt[x[i]=read()]++;
x[i]?pos[cnt[1]]=i:1;
}
if(!cnt[0])
{
for(register int i=0;i<=m;i++)
{
printf("%d ",0);
}
return 0;
}
res=tot=binom(cnt[0]),memset(f,0x3f,sizeof(f));
for(register int i=1;i<=n;i++)
{
f[i][abs(pos[1]-i)][1]=binom(i-1);
for(register int j=0;j<=m;j++)
{
for(register int k=1;k<=i&&k<cnt[1];k++)
{
r=cnt[1]-k;
if(f[i][j][k]!=0x3f3f3f3f)
{
for(register int l=i+1;l<=n-r+1;l++)
{
c=j+abs(pos[k+1]-l);
if(c<=m)
{
chkmin(f[l][c][k+1],f[i][j][k]+binom(l-i-1));
}
}
}
}
}
}
for(register int j=0;j<=binom(n);j++)
{
for(register int i=cnt[1];i<=n;i++)
{
if(f[i][j][cnt[1]]!=0x3f3f3f3f)
{
chkmin(res,f[i][j][cnt[1]]+binom(n-i));
}
}
printf("%d ",tot-res);
}
}

CodeForces 1420E Battle Lemmings的更多相关文章

  1. CodeForces 题目乱做

    是个补题记录. 1419 除了 F 场上都过了. CF1419A Digit Game 这题好多人 FST 啊-- 考虑如果串长为奇数那么最后操作的肯定是第一个人,串长为偶数的最后操作的肯定是第二个, ...

  2. 贪心/构造/DP 杂题选做

    本博客将会收录一些贪心/构造的我认为较有价值的题目,这样可以有效的避免日后碰到 P7115 或者 P7915 这样的题就束手无策进而垫底的情况/dk 某些题目虽然跟贪心关系不大,但是在 CF 上有个 ...

  3. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  4. Codeforces 738D. Sea Battle 模拟

    D. Sea Battle time limit per test: 1 second memory limit per test :256 megabytes input: standard inp ...

  5. Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships set乱搞

    D. One-Dimensional Battle ShipsTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...

  6. CodeForces 163B Lemmings 二分

    Lemmings 题目连接: http://codeforces.com/contest/163/problem/B Descriptionww.co As you know, lemmings li ...

  7. Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships set区间分解

    D. One-Dimensional Battle ShipsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/co ...

  8. 【42.86%】【Codeforces Round #380D】Sea Battle

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. Codeforces #380 div2 D(729D) Sea Battle

    D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

随机推荐

  1. Mac Catalina 下 gdb codesign问题解决

    在 macOS 上,无法直接使用 gdb 进行 debug. 这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程.调试某个进程,意味着你对这个进程有完全的控制权限,所以为了防止被 ...

  2. 使用redis来调用iptables,封禁恶意IP

    话不多说,通常大多数站点都会有被薅羊毛的情况,防护无非也就是业务层做处理,短时内不再响应恶意请求啦.虽然不响应了,可还是会消耗资源的,比如我要从数据库(当然也可能是内存数据库)去查询下,你是不是恶意的 ...

  3. hystrix 源码分析以及属性的配置

    一.feign与hystix结合 1.1测试环境搭建 架构如图: 非常简单,就是Order服务通过feign调用product服务的一个获取商品信息的一个接口: package com.yang.xi ...

  4. 使用Commons FileUpload 1.3.3和Servlet 3.0上传文件

    简介 Commons FileUpload可以轻松地为web应用程序添加强大,高性能的文件上传功能.Servlet3.0之前的web应用程序需要使用Commons FileUpload组件上传文件,但 ...

  5. gerrit安装配置记录

    gerrit安装配置 java -jar gerrit-2.13.5.war init -d gerrit Authentication method [OPEN/?]: htt Install Ve ...

  6. 02 C语言最简单快速上手的IDE

    不要让开发环境 成为学习路上的拦路虎,先培养学习兴趣和学习路上的成就感,这个对于激励自己持续学习很重要. 等真正从小白入门了,甚至成为大牛了,能解决诸多困难问题了,安装个开发环境还会再是个什么难事吗? ...

  7. Docker---初识到使用

    1.剖析虚拟化技术概念 1)虚拟化是一个主流的技术,虚拟的,看不见的,但是可以落地的,用于资源管理的一项技术: 2)虚拟化的技术诞生的目标就是为了解决资源管理和资源利用的解决方案: 3)虚拟化就是将物 ...

  8. Django ORM 引发的数据库 N+1 性能问题

    背景描述 最近在使用 Django 时,发现当调用 api 后,在数据库同一个进程下的事务中,出现了大量的数据库查询语句.调查后发现,是由于 Django ORM 的机制所引起. Django Obj ...

  9. RHSA-2017:2907-重要: wpa_supplicant 安全更新

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  10. jq显示数据在kindeditor

    1,定义编辑器的变量为全局变量 2,将数据显示到kindeditor   在我自己这里_下划线相当于数据,也就是将数据显示在kindeditor 中的textarea中 3,jquery获取kinde ...