说实话感觉不是一道蓝题……感觉挺水的,不过为了水题解,水题就够了(其实是觉得思考的过程比较典型,记录一下)

题解

刚开始看这道题感觉上没什么思路,但是我们可以先考虑用 \(O(n)\) 的时间去枚举发生的出逃次数,再用 \(O(n^2)\) 的时间去计算每一个出逃次数的情况下不一致条目的最小值。

现在我们考虑对于任意一个出逃次数 \(d\) ,我们如何计算。不妨设 \(f_{i,j}\) 表示到第 \(i\) 个点出逃过 \(j\) 次的最小差异值,易得 \(dp\) 方程为:

\[f_{i,j}=min(f_{k,j-1}+cost_{k+1,i})
\]

其中 \(cost_{l,r}\) 是指:区间 \(l\) ~ \(r\) 为一次完整的出逃区间(即其中没有发生过一次出逃且 \(l\) 和 \(r+1\) 发生了出逃)时的差异值。可以发现这个东西是可以 \(O(n^2)\) 预处理的。

那么现在需要枚举 \(i\) ,\(j\) ,\(k\) ,\(d\),复杂度为 \(O(n^4)\) ,肯定是不行的,但是我们可以发现在处理略大的 \(d\) 值时其实是可以计算出较小的 \(d\) 值的,所以我们可以直接一起计算,就不需要枚举 \(d\) 了,复杂度就降为 \(O(n^3)\) ,可行了。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,a[N];
int cost[N][N],f[N][N];
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
for(int i=1;i<=n;++i)
{
for(int j=i;j<=n;++j)
cost[i][j]=cost[i][j-1]+(a[j]!=j-i);
}
// for(int i=1;i<=n;++i)
// {
// for(int j=i;j<=n;++j)
// printf("%d %d %d\n",i,j,cost[i][j]);
// }
memset(f,63,sizeof(f));
for(int i=1;i<=n;++i)
{
f[i][1]=cost[1][i];
for(int j=1;j<i;++j)
{
for(int k=1;k<=j;++k)
f[i][k+1]=min(f[i][k+1],f[j][k]+cost[j+1][i]);
}
}
for(int i=1;i<=n;++i)
printf("%d\n",f[n][i]);
return 0;
}

P4267 [USACO18FEB]Taming the Herd的更多相关文章

  1. 解题:USACO18FEB Taming the Herd

    题面 从零开始的DP学习系列之贰(我的DP真的就这么烂TAT) 设DP状态的另一个技巧,考虑题目中有关答案的各种信息 然后这种和结尾有关系的$dp$可以考虑向前找结尾来转移 设$dp[i][j]$表示 ...

  2. [USACO18FEB]Taming the Herd

    Luogu4267 题解 对于\(dp[i][j]\) , 预处理出一些转移一步的次数 , 然后可以很方便的转移 : \(dp[i][j]=min(dp[k][j-1]+cnt[j][i])\)

  3. BZOJ5196: [Usaco2018 Feb]Taming the Herd(DP暴力)

    5196: [Usaco2018 Feb]Taming the Herd Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 78  Solved: 71[ ...

  4. 2019 GDUT Rating Contest II : A. Taming the Herd

    题面: A. Taming the Herd Input file: standard input Output file: standard output Time limit: 1 second Me ...

  5. DP小题集

    P2736 "破锣摇滚"乐队 Raucous Rockers 你刚刚继承了流行的"破锣摇滚"乐队录制的尚未发表的N(1 <= N <= 20)首歌的 ...

  6. USACO比赛题泛刷

    随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...

  7. hdu 2715 Herd Sums

    Herd Sums Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. POJ 2140 Herd Sums

    http://poj.org/problem?id=2140 Description The cows in farmer John's herd are numbered and branded w ...

  9. zookeeper分布式锁避免羊群效应(Herd Effect)

    本文(转自:http://jm-blog.aliapp.com/?p=2554)主要讲述在使用ZooKeeper进行分布式锁的实现过程中,如何有效的避免“羊群效应( herd effect)”的出现. ...

随机推荐

  1. 从头学起Verilog(三):Verilog逻辑设计

    引言 经过了组合逻辑和时序逻辑的复习,终于到了Verilog部分.这里主要介绍Verilog一些基础内容,包括结构化模型.TestBench编写和仿真.真值表模型. 这部分内容不多,也都十分基础,大家 ...

  2. uiautomatorviewer 启动报错

    我的sdk是随着AndroidStudio中下载下来的,这样做是有好处的,建议直接装个AndroidStudio这样管理sdk很方便,虽然很大,但是总比后期发现有问题好一点.最近在研究Appium要定 ...

  3. python之 《zip,lambda, map》

    1.zip 对于zip我们一般都是用在矩阵上 eg: a = [1,2,3] b = ['a', 'b', 'c'] x = zip(a, b) print(x) print(list(x)) 结果是 ...

  4. 虚拟机、ip地址

    使用的系统 虚拟机:VMware workstations+win10:注:系统装好后先切换成Administrator,给VMware装VMware Tools linux发行版本  rhel-se ...

  5. Apache POI读写Excel

    Apache POI是Apache软件基金会的开放源码函式库,POIAPI给Java程序对Microsoft Office格式档案读和写的功能. 官方文档 [https://poi.apache.or ...

  6. html2image

    测试没有,生产有 也就是写死的显示,配置的不显示

  7. 面经分享!蚂蚁金服三面被拒,重拾起鼓四面猿辅导成功拿下offer!

    前言 一直有小伙伴要我分享面经,说自己想面互联网公司,无奈经验太少想多看看其他人是怎么面的.我这两天刚好和一个刚拿到猿辅导offer的朋友吃了个饭,他向我说了说自己的面试经历.粉丝朋友是末流211毕业 ...

  8. 简单实用的Boom 3D进阶使用教程分享

    对于初学者来说,简单体验Boom 3D的3D环绕音效,就可以通过普通耳机享受到高品质耳机的动人音效.而对于进阶者来说,Boom 3D灵活的预设功能,能让其享受到自由调整均衡器.低音的乐趣. 图1:Bo ...

  9. 安装swoole扩展

    wget https://github.com/swoole/swoole-src/archive/v1.9.3-stable.tar.gz tar -zxvf v1.9.3-stable.tar.g ...

  10. 永别了,Dota2!

    永别了,Dota2 .输了游戏,我还有人生! 游戏中,总有那些喷子,自己玩的不好,经常说人家! 和大便打架,即使赢了,身上也非常臭! 所以对于这种人,敬而远之即可!不吵不闹,默默把锅扛起!赢了,就好说 ...