SOJ 2818_QQ音速
【题意】两只手,一次只能用一只手按一个键子(0,1,2,3),给出从i键到j键所需的消耗的体力,求依次按下一系列键子所需最小体力。
【分析】
法一:开一个三维数组,分别记录移动到位置及左右手按的键子。
状态转移方程;
v[k][i][j]=min(v[k-1][c[k-1]-'0'][j]+w[c[k-1]-'0'][i],v[k-1][i][c[k-1]-'0']+w[c[k-1]-'0'][j]);其中k取遍0.1.2.3
【代码】
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000050;
int v[maxn][4][4];
int w[4][4]={{0,1,2,2},{1,0,1,1},{2,1,0,2},{2,1,2,0}};
int Min;
char c[maxn];
const int INF=0x3fffffff;
int main (void)
{
while(scanf("%s",c)==1)
{
Min=INF;
int len=strlen(c);
memset(v,10,sizeof(v));
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
v[0][i][j]=w[3][j]+w[2][i]; for(int k=1;k<len;k++)
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
v[k][i][j]=min(v[k-1][c[k-1]-'0'][j]+w[c[k-1]-'0'][i],v[k-1][i][c[k-1]-'0']+w[c[k-1]-'0'][j]);
}
}
for(int i=0;i<4;i++)
{
Min=min(v[len-1][i][c[len-1]-'0'],Min);
Min=min(v[len-1][c[len-1]-'0'][i],Min);
}
printf("%d\n",Min);
}
return 0;
}
法二:开一个二维数组,分别记录移动的次数及对于某一只手来说该次移动所按的键子(注意边界
状态转移方程:
对于j取遍0,1,2,3
当j==c[i-1]-'0'时
for(int k=0;k<4;k++)
v[i][j]=min(v[i][j],v[i-1][k]+w[k][c[i]-'0']);(j==c[i-1]-'0'
当j!=c[i-1]-'0时 v[i][j]=v[i-1][j]+w[c[i-1]-'0'][c[i]-'0'];
【代码】
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000050;
int v[maxn][4];
int w[4][4]={{0,1,2,2},{1,0,1,1},{2,1,0,2},{2,1,2,0}};
int Min,len;
char c[maxn];
const int INF=0x3fffffff;
int main (void)
{
while(scanf("%s",c)==1)
{
Min=INF;
len=strlen(c);
for(int i=0;i<maxn;i++)
for(int j=0;j<4;j++)
v[i][j]=INF;
v[0][2]=w[3][c[0]-'0'];
v[0][3]=w[2][c[0]-'0'];
for(int i=1;i<len;i++)
{
for(int j=0;j<4;j++)
{
if(j==c[i-1]-'0')
{
for(int k=0;k<4;k++)
v[i][j]=min(v[i][j],v[i-1][k]+w[k][c[i]-'0']);
}
else
v[i][j]=v[i-1][j]+w[c[i-1]-'0'][c[i]-'0'];
}
}
for(int i=0;i<4;i++)
Min=min(v[len-1][i],Min);
printf("%d\n",Min);
}
return 0;
}
SOJ 2818_QQ音速的更多相关文章
- Soj题目分类
-----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...
- 【贪心】SOJ 13983
SOJ 13983. Milk Scheduling 这是比赛题,还是作死的我最讨厌的英文题,题目大意就是有n头奶牛,要在喂奶截止时间前给他喂奶并得到相应的含量的牛奶. 一开始的想法就是挑选截止日期的 ...
- IC封装图片认识(二):SOP&SOJ
SOP SOP-EIAJ-TYPE-II-14L SSOP SSOP-16L TSOP(Thin Small Outline Package) TSSOP(Thin Shrink Outline Pa ...
- SOJ 1685:chopsticks(dp)
题目链接 说实话挺喜欢soj的界面,简简单单,没有多余的东西hhh(但是简单到连内存限制,时间限制都看不到了. 题意是有个“奇葩”的主人公,吃饭要用三根筷子.两根短的一根长的. 现在给你n根筷子,要在 ...
- LaunchFaster 启动器工具 - 类似 Rolan 和音速启动的图标式快捷启动软件
LaunchFaster 启动器是本人近期编写的一款windows平台上快速启动应用的开源工具软件. LaunchFaster 启动器是一款类似于 Rolan 和 音速启动 和 Lily 的图标形式的 ...
- SOJ 4552 [期望,概率]
题目链接:[http://acm.scu.edu.cn/soj/problem.action?id=4552] 题意:给你n种卡牌,每种卡牌有无限多个,每次从中抽取一张卡牌,问:1.集齐这n种卡牌需要 ...
- 开发类似"音速启动"的原创工具简码"万能助手"的过程中对ztree.js与win标准控件treeview、HTMLayout树形框等优缺点的比较
在开发类似"音速启动"的桌面快捷方式管理软件简码"万能助手"的早期规划中,曾经考虑过几种树形框方案: ztree.js.win标准控件treeview.HTML ...
- soj 131 找题
soj 131 找题 给出两个长度为n,都含k个1的字符串A,B.现在令\(a_1,a_2,\dots,a_k\)是A中1的下标,\(b_1,b_2,\dots,b_k\)是B中1的下表,然后将a,b ...
- SOJ 4482 忽悠大神【最小生成树】
题目链接: http://acm.scu.edu.cn/soj/problem.action?id=4482 题意: 给定边权和点权,从一个点出发并回到该点,减少尽量多的边,每路过点和边都要把权重加到 ...
随机推荐
- AJPFX关于TreeSet集合的介绍
需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台.分析:1.创建键盘录入对象: 2.创建TreeSet集合,使用匿名内部类实现Compa ...
- java获取公网ip以及物理地址和代理商
package ipconfig; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- Rxlifecycle使用详解,解决RxJava内存泄露问题
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1122/3711.html
- 对openjdk的javac编译器扩展了一个语法糖
我的扩展功能描述如下: 在java的现有语法中加入var来声明变量,并且可以根据初始化数据来自动类型推导. 举两个例子: 例一: 如下JAVA代码(注意这里的var是新语法): import java ...
- SQL——时间戳
mysql 低版本,date.datetime.timestamp 无法精确到毫秒 可以舍弃时间类型字段,用 bigint 来代替,如果用字符串类型代替,还是比较担心排序的时候只是根据第一个字母进行排 ...
- 玩转CPU运行曲线
Leaf 是不是从来没有想过看看cpu运行曲线啊骚年?顶多也就仅仅是看看cpu利用率,吓自己一跳后感觉关闭几个不该打开的程序~ 然而问题来了,微软公司要让你绘制cpu运行曲线啊!!不仅是固定的直线,还 ...
- 程序员段子:世界上最大的同性交友平台github
程序员(又名程序猿)因为总是冲锋在网络的最前端,还有程序猿的各种特殊性,大家在茶余饭后都有很多关于程序员的段子流传.大多都是程序员自黑的,先说在前面,程序猿还是很好的!下面看看你有没有中枪的那一条呢? ...
- 用npm来部署快速一个httpweb服务器
https://blog.csdn.net/u012182627/article/details/55060594 http-server的安装######注意事项 安装http-server的时候 ...
- 表单文件上传编码方式(enctype 属性)
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 如下: <form action="upload.php" method="post&quo ...
- js模拟支付宝发送短信验证码&&&&短信倒计时
html <div class="pwdContent"> <div class="pwdBox"></div> <d ...