P1052 过河(状压dp)
来源:互联网 发布:快听小说显示网络异常 编辑:程序博客网 时间:2024/05/21 18:37
https://www.luogu.org/problem/show?pid=1052
观察数据,L到10^9,就是O(n)也不可以。
然后再观察数据,发现共才100个石子,对于桥的长度来说石子非常稀疏,中间有一大块空白区域。
状态转移方程: f[i]=min(f[i],f[i-j]+v[i]);
发现,f[i]的状态只跟f[i-t]~f[i-s]有关,所以中间会有一大块区域无用(可以这么说),于是就考虑到将无用的部分可以去掉,就用到了状压dp;
因为状态转移方程中的f[i]只跟前面长度为t的一段有关,而且只会影响长度为t的一段。
处理方法,将石子之间长度d[i]大于d[i]%t+t的,压缩为d[i]%t+t;
注意的问题:因为青蛙不是正好跳到L,所以要处理到L+t-1
贴上代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<string>#include<map>#define LL long longusing namespace std;int l,s,t,m;int a[110],f[111*200],v[111*200];int d[111];int main(){ memset(f,127,sizeof(f)); scanf("%d%d%d%d",&l,&s,&t,&m); for(int i=1;i<=m;i++) scanf("%d",&a[i]); sort(a+1,a+m+1); for(int i=1;i<=m;i++) d[i]=a[i]-a[i-1]; for(int i=1;i<=m;i++) { if(d[i]<=t+d[i]%t) a[i]=a[i-1]+d[i]; else a[i]=a[i-1]+d[i]%t+t; v[a[i]]=1; } l=(l-a[m])%t+t+a[m]; memset(f,127,sizeof(f)); f[0]=0; for(int i=1;i<=l+t-1;i++) for(int j=s;j<=t;j++) if(i-j>=0&&i-j<l) { if(!v[i]) f[i]=min(f[i],f[i-j]); else f[i]=min(f[i],f[i-j]+1); } int ans=200; for(int i=l;i<=l+t-1;i++) ans=min(ans,f[i]); printf("%d\n",ans); return 0;}
阅读全文
1 0
- P1052 过河(状压dp)
- 洛谷P1052 过河(NOIp2005)
- [P1052]过河
- 洛谷 P1052 过河
- 洛谷P1052&NOIP2005 过河
- 【洛谷P1052】过河
- 洛谷 P1052 过河
- 洛谷 P1052 过河
- 洛谷P1052 过河
- 洛谷p1052过河
- 洛谷 P1052 [NOIP2005 T2] 过河
- 过河(状压dp典型题)
- 状压DP-NOIPTG2005过河
- [NOIP2005][状压DP]过河
- 【luogu1052】过河(dp)
- 【大渣】【状压Dp】过河
- 袋鼠过河问题(DP)
- 线性动态规划——洛谷P1052 过河
- SpringMVC之AJAX初探
- Python第三方库——Matplotlib_绘制数据的均值和方差图
- 使用python及百度API对百度poi数据进行爬取(一)
- date 基本样式修改
- openfire 开发时输出xml到控制台
- P1052 过河(状压dp)
- 多核与多个CPU啥区别?
- MVC设计模式
- 题3 二维数组中的查找
- 【Python】 关于Python 3.x中,使用print函数时出现的语法错误(SyntaxError: invalid syntax)的问题的原因
- .net关于反射加载机制问题
- Python基础(一)
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- Open-Sourcing LayoutKit