【luogu1052】过河(dp)
来源:互联网 发布:mac设置自动关机 编辑:程序博客网 时间:2024/05/22 03:45
题目:
我是超链接
题解:
是一个入门的状压dp,我用两步跳过去的和用10000步跳过去的(只要中间没有石头)就是一样的,1e9有点大了,不如压缩一下路径
压缩成mod后的值,然后就是很简单的dp啦,f[i]表示到i最少的石子=min(f[i-j]+1);一定记得要特别判断s==t的情况,那踩到的石子就避免不了啦
代码:
#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>using namespace std;int l,s,t,m,f[10005],a[105],d[105];bool you[10005];int main(){int i,j;scanf("%d%d%d%d",&l,&s,&t,&m);for (i=1;i<=m;i++) scanf("%d",&a[i]);sort(a+1,a+m+1);for (i=1;i<=m;i++) if (a[i]-a[i-1]>t) d[i]=d[i-1]+(a[i]-a[i-1])%t+t; else d[i]=d[i-1]+a[i]-a[i-1];for (i=1;i<=m;i++) you[d[i]]=true;memset(f,0x7f,sizeof(f));int ans=f[0];f[0]=0;for (i=1;i<=d[m]+t-1;i++) for (j=s;j<=t;j++) if (i-j<0) break; else if (you[i]) f[i]=min(f[i],f[i-j]+1); else f[i]=min(f[i],f[i-j]);for (i=d[m];i<=d[m]+t-1;i++) ans=min(ans,f[i]);printf("%d",ans);}
阅读全文
0 0
- 【luogu1052】过河(dp)
- luogu1052 【2005提高】过河 (压缩状态)
- P1052 过河(状压dp)
- 袋鼠过河问题(DP)
- 过河(DP)
- NOIP05 过河(状态压缩DP)
- NOIP2005 青蛙过河(状态压缩DP)
- [Usaco2008 Mar]奶牛过河(dp)
- Vijos p1002 过河 (DP+状态压缩)
- vijos p1002 过河(离散化dp)
- Hust oj 1186 青蛙过河(dp)
- 过河(状压dp典型题)
- HRBUST 1186 青蛙过河(dp)
- HUBUST 1186 青蛙过河(dp)
- CFgym:Teamwork(dp & 过河问题)
- 【贪心DP】过河问题
- 过河 贪心dp
- BOJ1293 小马过河 dp
- Struts2知识点
- Leetcode 514. Freedom Trail
- POj 2976
- 大数据以及Hadoop相关概念介绍
- 苹果系统安装Java开发环境JDK
- 【luogu1052】过河(dp)
- Hibernate 事务提交sql语句的顺序
- Spring Security(09)——Filter
- ~守护进程~
- Java NIO系列教程(一) Java NIO 概述
- 消息驱动
- 移动端日期选择插件
- git、cocoapods的简单使用
- 使用PHP自带zlib函数 文件压缩解压缩