CodeForces 1420E Battle Lemmings
题意
略。
\(\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的更多相关文章
- CodeForces 题目乱做
是个补题记录. 1419 除了 F 场上都过了. CF1419A Digit Game 这题好多人 FST 啊-- 考虑如果串长为奇数那么最后操作的肯定是第一个人,串长为偶数的最后操作的肯定是第二个, ...
- 贪心/构造/DP 杂题选做
本博客将会收录一些贪心/构造的我认为较有价值的题目,这样可以有效的避免日后碰到 P7115 或者 P7915 这样的题就束手无策进而垫底的情况/dk 某些题目虽然跟贪心关系不大,但是在 CF 上有个 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- Codeforces 738D. Sea Battle 模拟
D. Sea Battle time limit per test: 1 second memory limit per test :256 megabytes input: standard inp ...
- 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 ...
- CodeForces 163B Lemmings 二分
Lemmings 题目连接: http://codeforces.com/contest/163/problem/B Descriptionww.co As you know, lemmings li ...
- 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 ...
- 【42.86%】【Codeforces Round #380D】Sea Battle
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 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 ...
随机推荐
- 最精美详尽的 HTTPS 原理图!
来源:r6a.cn/ffJk 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有必要的,特别是一些计算机基础方面的内容,就比如本篇文章要讲的计算机网络方面的知识.本文将为大 ...
- java实现详细的身份证验证、能正确验证身份证正确性
IdCardExpUtil.java package com.javazs.util; import java.text.ParseException; import java.text.Simple ...
- TP 3.2 图片处理类
TP 3.2 图片处理类 <?php namespace Common\Common; class ImageEdit{ /** * [上传图片并生成缩略图] * @param [type] $ ...
- pycharm 配置 github
今天突然想把自己的代码上传到github上去,然后就研究了下pycharm的配置. 首先呢,你得有个github的账号,然后建立一个项目. 然后打开pycharm,选择file->Setting ...
- 日志分析平台ELK之日志收集器logstash
前文我们聊解了什么是elk,elk中的elasticsearch集群相关组件和集群搭建以及es集群常用接口的说明和使用,回顾请查看考https://www.cnblogs.com/qiuhom-187 ...
- Linux设置主机名称与host映射
uname -n :查看host对应的域名 2.在 /etc/hostname 删除原来的重新配置需要的域名 3.在 /etc/hosts 中添加域名和映射ip 4.重启系统 5.其他主机 ...
- 学习Jmeter,这一篇就够了
Jmeter在软件测试中的常用功能,看完你应该就会了 1.Jmeter的下载安装 1.1 Jmeter的官方网址是:http://jmeter.apache.org/:下载最新的包到本地进行解压,路 ...
- NOIP提高组2016 D1T2 【天天爱跑步】
码了一个下午加一个晚上吧...... 题目描述: 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成 ...
- Linux最常用的命令大全
Linux最常用的命令大全 按功能索引 目录处理命令 ls mkdir pwd cd rmdir cp mv rm 文件处理命令 touch cat tac more less head tail l ...
- 解决React前端在开发环境的跨域问题
在前后端分离的分布式架构中,跨域是一道无法绕过去的门槛,众所周知,生产环境上解决跨域最便捷的方式是使用Nginx来处理,那么,在本地开发环境又该如何处理呢? React框架里处理跨域问题,可以使用ht ...