Problem H: 悦动达人
来源:互联网 发布:iphone使用电脑的网络 编辑:程序博客网 时间:2024/04/29 06:36
Problem H: 悦动达人
Description
一个游戏,在屏幕上有5个格子形成一行,每一秒都会有一个格子闪烁,格子闪烁时你需要保证至少有一只手指在格子上面, 现在我们已经知道第i秒时,第xi个格子会闪烁,我们假设手指的移动不花费时间,你现在用两根手指玩这个游戏, 设初始两根手指都在0处位置,算出n秒过后手指需要移动的最小距离。(允许手指交叉)
注:手指移动的距离的计算是,假设你的一根从x,移动到y格,那么移动的距离是|x-y|
Input
第一行一个数T,表示有T组测试数据(T<=50) 第二行,n,表示进行n秒(1<=n<=10^4) 下一行 n个数,xi(0<=xi<=4)
Output
输出n秒过后手指需要移动的最小距离.
Sample Input
1202
Sample Output
2
小结:
dp基础题目...大神们都是这么说的,还是有些沮丧的...依然还有很长的一段路要走啊...感慨万千啊!
以下是AC代码:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>#define maxn 10050using namespace std;int dp[6][6][maxn];int step[maxn];int main(){ int t; scanf("%d",&t); for(int i=1;i<=t;i++) { int n; scanf("%d",&n); step[1]=0; for(int j=1;j<=n;j++) { scanf("%d",&step[j]); } for(int i=0;i<5;i++) for(int j=0;j<5;j++) for(int m=0;m<=n;m++) dp[i][j][m]=100000; dp[0][0][0]=0; for(int m=1;m<=n;m++) { for(int i=0;i<5;i++) for(int j=0;j<5;j++) { dp[step[m]][j][m]=min(dp[step[m]][j][m],dp[i][j][m-1]+abs(step[m]-i)); dp[i][step[m]][m]=min(dp[i][step[m]][m],dp[i][j][m-1]+abs(step[m]-j)); } } int ans=100000; for(int i=0;i<5;i++) for(int j=0;j<5;j++) { if(dp[i][j][n]<ans) ans=dp[i][j][n]; } printf("%d\n",ans); } return 0;}
0 0
- Problem H: 悦动达人
- Problem H
- Problem H
- Problem H
- Problem H
- Problem H
- Problem H
- Problem H
- problem h
- Problem-H
- Problem H
- Problem H
- Problem-H
- Problem H
- Problem H
- Problem H
- GDUT决赛 - Problem H: 悦动达人(DP)
- Problem H: 筛选素数
- HDU 5015 233 Matrix(矩阵快速幂)
- 黑马程序员--java基础--面向对象思想和单例模式
- 《数据结构编程实验》 2.4.4Calendar个人见解,求指导
- Java中关于String类型的10个问题
- 关于selenium android下的浏览器测试
- Problem H: 悦动达人
- webview白屏的原因之一
- 2015-03-19-数据规整化(3)-字符串操作
- 2.2 密度散点图
- 让golang 代码在arm设备上运行
- Struts2源码分析之请求处理
- light oj 1337--DFS--分块
- 112家IT公司薪水一览表
- 版本控制 - Git命令 概括