UVA 12825 dp
来源:互联网 发布:淘宝卖家怎样收款. 编辑:程序博客网 时间:2024/06/05 08:16
写的很乱
#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <map>#include <set>#include <vector>#include <queue>using namespace std ;const int inf = 100000000 ;const int N = 1008 ;int dxmin[N][4] ;int dxmax[N][4] ;int dymin[N][4] ;int dymax[N][4] ;char d[N] ;int n ;int dx[4] = {1,0,-1,0} ;int dy[4] = {0,-1,0,1} ;char word[N] ;int main(){ //freopen("a.txt" , "r" , stdin) ; int ca = 1 ; while(scanf("%s" , word+1) != EOF){ n = strlen(word+1) ; for(int i = 0 ; i <= n ; i++){ for(int j = 0 ; j < 4 ; j++){ dxmin[i][j] = dxmax[i][j] = dymin[i][j] = dymax[i][j] = inf ; } } dxmin[0][0] = 0 ; dxmax[0][0] = 0 ; dymin[0][0] = 0 ; dymax[0][0] = 0 ; for(int i = 1 ; i <= n ; i++){ if(word[i] == 'F'){ for(int j = 0 ; j < 4 ; j++){ if(dxmin[i-1][j] != inf) if(dxmin[i][j] == inf) dxmin[i][j] = dxmin[i-1][j] + dx[j] ; else dxmin[i][j] = std::min(dxmin[i][j] , dxmin[i-1][j] + dx[j]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmax[i-1][j] != inf) if(dxmax[i][j] == inf) dxmax[i][j] = dxmax[i-1][j] + dx[j] ; else dxmax[i][j] = std::max(dxmax[i][j] , dxmax[i-1][j] + dx[j]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymin[i-1][j] != inf) if(dymin[i][j] == inf) dymin[i][j] = dymin[i-1][j] + dy[j] ; else dymin[i][j] = std::min(dymin[i][j] , dymin[i-1][j] + dy[j]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymax[i-1][j] != inf) if(dymax[i][j] == inf) dymax[i][j] = dymax[i-1][j] + dy[j] ; else dymax[i][j] = std::max(dymax[i][j] , dymax[i-1][j] + dy[j]) ; } } else if(word[i] == 'L'){ for(int j = 0 ; j < 4 ; j++){ if(dxmin[i-1][(j+1)%4] != inf) if(dxmin[i][j] == inf) dxmin[i][j] = dxmin[i-1][(j+1)%4] ; else dxmin[i][j] = std::min(dxmin[i][j] , dxmin[i-1][(j+1)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmax[i-1][(j+1)%4] != inf) if(dxmax[i][j] == inf) dxmax[i][j] = dxmax[i-1][(j+1)%4] ; else dxmax[i][j] = std::max(dxmax[i][j] , dxmax[i-1][(j+1)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymin[i-1][(j+1)%4] != inf) if(dymin[i][j] == inf) dymin[i][j] = dymin[i-1][(j+1)%4] ; else dymin[i][j] = std::min(dymin[i][j] , dymin[i-1][(j+1)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymax[i-1][(j+1)%4] != inf) if(dymax[i][j] == inf) dymax[i][j] = dymax[i-1][(j+1)%4] ; else dymax[i][j] = std::max(dymax[i][j] , dymax[i-1][(j+1)%4]) ; } } else if(word[i] == 'R'){ for(int j = 0 ; j < 4 ; j++){ if(dxmin[i-1][(j-1+4)%4] != inf) if(dxmin[i][j] == inf) dxmin[i][j] = dxmin[i-1][(j-1+4)%4] ; else dxmin[i][j] = std::min(dxmin[i][j] , dxmin[i-1][(j-1+4)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmax[i-1][(j-1+4)%4] != inf) if(dxmax[i][j] == inf) dxmax[i][j] = dxmax[i-1][(j-1+4)%4] ; else dxmax[i][j] = std::max(dxmax[i][j] , dxmax[i-1][(j-1+4)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymin[i-1][(j-1+4)%4] != inf) if(dymin[i][j] == inf) dymin[i][j] = dymin[i-1][(j-1+4)%4] ; else dymin[i][j] = std::min(dymin[i][j] , dymin[i-1][(j-1+4)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymax[i-1][(j-1+4)%4] != inf) if(dymax[i][j] == inf) dymax[i][j] = dymax[i-1][(j-1+4)%4] ; else dymax[i][j] = std::max(dymax[i][j] , dymax[i-1][(j-1+4)%4]) ; } } else{ for(int j = 0 ; j < 4 ; j++){ if(dxmin[i-1][j] != inf) if(dxmin[i][j] == inf) dxmin[i][j] = dxmin[i-1][j] + dx[j] ; else dxmin[i][j] = std::min(dxmin[i][j] , dxmin[i-1][j] + dx[j]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmax[i-1][j] != inf) if(dxmax[i][j] == inf) dxmax[i][j] = dxmax[i-1][j] + dx[j] ; else dxmax[i][j] = std::max(dxmax[i][j] , dxmax[i-1][j] + dx[j]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymin[i-1][j] != inf) if(dymin[i][j] == inf) dymin[i][j] = dymin[i-1][j] + dy[j] ; else dymin[i][j] = std::min(dymin[i][j] , dymin[i-1][j] + dy[j]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymax[i-1][j] != inf) if(dymax[i][j] == inf) dymax[i][j] = dymax[i-1][j] + dy[j] ; else dymax[i][j] = std::max(dymax[i][j] , dymax[i-1][j] + dy[j]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmin[i-1][(j+1)%4] != inf) if(dxmin[i][j] == inf) dxmin[i][j] = dxmin[i-1][(j+1)%4] ; else dxmin[i][j] = std::min(dxmin[i][j] , dxmin[i-1][(j+1)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmax[i-1][(j+1)%4] != inf) if(dxmax[i][j] == inf) dxmax[i][j] = dxmax[i-1][(j+1)%4] ; else dxmax[i][j] = std::max(dxmax[i][j] , dxmax[i-1][(j+1)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymin[i-1][(j+1)%4] != inf) if(dymin[i][j] == inf) dymin[i][j] = dymin[i-1][(j+1)%4] ; else dymin[i][j] = std::min(dymin[i][j] , dymin[i-1][(j+1)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymax[i-1][(j+1)%4] != inf) if(dymax[i][j] == inf) dymax[i][j] = dymax[i-1][(j+1)%4] ; else dymax[i][j] = std::max(dymax[i][j] , dymax[i-1][(j+1)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmin[i-1][(j-1+4)%4] != inf) if(dxmin[i][j] == inf) dxmin[i][j] = dxmin[i-1][(j-1+4)%4] ; else dxmin[i][j] = std::min(dxmin[i][j] , dxmin[i-1][(j-1+4)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dxmax[i-1][(j-1+4)%4] != inf) if(dxmax[i][j] == inf) dxmax[i][j] = dxmax[i-1][(j-1+4)%4] ; else dxmax[i][j] = std::max(dxmax[i][j] , dxmax[i-1][(j-1+4)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymin[i-1][(j-1+4)%4] != inf) if(dymin[i][j] == inf) dymin[i][j] = dymin[i-1][(j-1+4)%4] ; else dymin[i][j] = std::min(dymin[i][j] , dymin[i-1][(j-1+4)%4]) ; } for(int j = 0 ; j < 4 ; j++){ if(dymax[i-1][(j-1+4)%4] != inf) if(dymax[i][j] == inf) dymax[i][j] = dymax[i-1][(j-1+4)%4] ; else dymax[i][j] = std::max(dymax[i][j] , dymax[i-1][(j-1+4)%4]) ; } } } int xmin = inf ; for(int i = 0 ; i < 4 ; i++){ if(dxmin[n][i] != inf) xmin = std::min(xmin , dxmin[n][i]) ; } int xmax = -inf ; for(int i = 0 ; i < 4 ; i++){ if(dxmax[n][i] != inf) xmax = std::max(xmax , dxmax[n][i]) ; } int ymin = inf ; for(int i = 0 ; i < 4 ; i++){ if(dymin[n][i] != inf) ymin = std::min(ymin , dymin[n][i]) ; } int ymax = -inf ; for(int i = 0 ; i < 4 ; i++){ if(dymax[n][i] != inf) ymax = std::max(ymax , dymax[n][i]) ; } printf("Case %d: %d %d %d %d\n" , ca++ , xmin , xmax , ymin , ymax) ; } return 0;}
0 0
- UVA 12825 dp
- UVA DP 入门专题
- uva 1424 简单DP
- uva 10192 DP
- UVA dp题目汇总
- UVa 4256 - Salesmen dp
- UVa 10271 - Chopsticks dp
- UVA 1424 - Salesmen (dp)
- uva 672 Gangsters( dp )
- UVA 10271 Chopsticks(dp)
- uva 10271 Chopsticks(dp)
- UVA 11584 DP水题
- UVA 1424 DP水题
- UVA 10534 DP+LIS
- UVA 11552 DP水题
- UVA 1456 DP水题
- Uva 624 背包DP
- Uva 562 背包DP
- c++ primer(第五版)学习笔记及习题答案代码版(第四章)表达式
- spfa初探
- iOS UICollectionView基本属性 和 代理方法
- iOS 短信验证码倒计时按钮的实现
- IOS9 适配
- UVA 12825 dp
- Mac下安装Octave
- 打印1到最大的n位数
- 蓝牙BLE与设备交互研发录一
- Xcode7中你一定要知道的炸裂调试神技
- Linux----利用hosts.deny 防止暴力破解ssh
- 大型网站技术架构--读书笔记
- ireport打印pdf字体问题
- 尺寸单位转换