博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解题:USACO18FEB Taming the Herd
阅读量:5140 次
发布时间:2019-06-13

本文共 907 字,大约阅读时间需要 3 分钟。

从零开始的DP学习系列之贰(我的DP真的就这么烂TAT)

设DP状态的另一个技巧,考虑题目中有关答案的各种信息

然后这种和结尾有关系的$dp$可以考虑向前找结尾来转移

设$dp[i][j]$表示到第$i$天为止,有$j$天有奶牛逃跑的最小不一致记录数。转移时枚举天数和逃跑天数,然后枚举一个前一个逃跑的天数$k$,从$dp[i-1][k]$以一个$dif[k+1][i]$的代价转移过来。其中$dif[i][j]$表示从第$i$天到第$j$天中与记录不一致的数目。这样直接做是$O(n^4)$的,不过这个$dif$显然可以$O(n^2)$预处理,然后时间复杂度就降到了$O(n^3)$

1 #include
2 #include
3 #include
4 using namespace std; 5 const int N=105; 6 int num[N],dif[N][N],dp[N][N],n; 7 int main () 8 { 9 scanf("%d",&n);10 for(int i=1;i<=n;i++)11 scanf("%d",&num[i]);12 for(int i=1;i<=n;i++)13 {14 int tmp=0;15 for(int j=i;j<=n;j++)16 dif[i][j]=(tmp+=(num[j]!=j-i));17 }18 memset(dp,0x3f,sizeof dp); dp[0][0]=0;19 for(int i=1;i<=n;i++)20 for(int j=1;j<=i;j++)21 for(int k=0;k
View Code

 

转载于:https://www.cnblogs.com/ydnhaha/p/9677678.html

你可能感兴趣的文章
LVM快照(snapshot)备份
查看>>
绝望的第四周作业
查看>>
一月流水账
查看>>
npm 常用指令
查看>>
判断字符串在字符串中
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
HashPump用法
查看>>
cuda基础
查看>>
Vue安装准备工作
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
LibSVM for Python 使用
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>
解决ajax请求cors跨域问题
查看>>
《收获,不止Oracle》pdf
查看>>
LinkedList<E>源码分析
查看>>