hdu4433(三维DP,后效性)
来源:互联网 发布:路由器选择算法 优点 编辑:程序博客网 时间:2024/06/11 21:06
题意:给你个长度为n的数字串,每次最多旋转三个数字,至少经过都少部才能到达目标串。
思路:一开始我也是用DP做的,但是没考虑到后效性,所以wa了。后来看了题解,思路是这样的dp[i][j][k]表示第i为匹配好,第i+1位增加了j,第i+2增加了k。状态转移:第i+2位增加k+x,第i+3位增加y,然后还要考虑到减的情况。
代码如下:
#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<stdio.h>#include<math.h>#define N 1005#define inf 0x7ffffff#define eps 1e-9#define pi acos(-1.0)using namespace std;char a[N],b[N];int dp[N][15][15];int main(){//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout); while(scanf("%s%s",a,b) != EOF) { int i,j,k; int n = strlen(a); for(i = 0; i <= n; i++) for(j = 0; j < 10; j++) for(k = 0; k < 10; k++) dp[i][j][k] = inf; dp[0][0][0] = 0; for(i = 0; i < n; i++) for(j = 0; j < 10; j++) for(k = 0; k < 10; k++) if(dp[i][j][k] != inf) { int x,y; int t = (b[i] - a[i] - j + 20)%10; for(x = 0; x <= t; x++) for(y = 0; y <= x; y++) dp[i+1][(k+x)%10][y] = min(dp[i+1][(k+x)%10][y], dp[i][j][k]+t); t = (10-t); for(x = 0; x <= t; x++) for(y = 0; y <= x; y++) dp[i+1][(k-x+10)%10][(10-y)%10] = min(dp[i+1][(k-x+10)%10][(10-y)%10], dp[i][j][k]+t); } printf("%d\n",dp[n][0][0]); } return 0;}
0 0
- hdu4433(三维DP,后效性)
- hdu4433——dp
- HDU4433 Locker(DP)
- hdu4433 locker(dp)
- hdu4433(dp+贪心)
- Cogs 376. [IOI2002]任务安排(后效性DP)
- [jzoj]1205. 帮助Bub(“后效性”DP)
- 什么是无后效性?
- cf237,D.Minesweeper 1D (小范围后效性dp)
- Codefoeces 404D Minesweeper 1D "小范围后效性"dp
- HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)
- 最优化原理与无后效性
- hdu 5035 指数分布无后效性
- 动态规划(4):消除后效性
- hdu3466_01背包变形 理解无后效性
- hdu4433 locker
- hdu4433 locker
- hdu4433 locker
- 数字填充
- openmp之互斥锁
- halcon边缘提取和赃物检测的常用方法
- 调用JOB执行外部脚本报错ORA-27369解决方法
- 东欧电子游戏市场概况
- hdu4433(三维DP,后效性)
- domino cs转bs
- ios 相册功能
- android 通过jdbc连接sql server 2008实现 增,删 改 查功能
- PHP程序员的技术成长规划
- java中的正则表达式实例
- Linux Shell之awk命令
- Loki库的使用
- 黑客?设计师?