【题意】两只手,一次只能用一只手按一个键子(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音速的更多相关文章

  1. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

  2. 【贪心】SOJ 13983

    SOJ 13983. Milk Scheduling 这是比赛题,还是作死的我最讨厌的英文题,题目大意就是有n头奶牛,要在喂奶截止时间前给他喂奶并得到相应的含量的牛奶. 一开始的想法就是挑选截止日期的 ...

  3. IC封装图片认识(二):SOP&SOJ

    SOP SOP-EIAJ-TYPE-II-14L SSOP SSOP-16L TSOP(Thin Small Outline Package) TSSOP(Thin Shrink Outline Pa ...

  4. SOJ 1685:chopsticks(dp)

    题目链接 说实话挺喜欢soj的界面,简简单单,没有多余的东西hhh(但是简单到连内存限制,时间限制都看不到了. 题意是有个“奇葩”的主人公,吃饭要用三根筷子.两根短的一根长的. 现在给你n根筷子,要在 ...

  5. LaunchFaster 启动器工具 - 类似 Rolan 和音速启动的图标式快捷启动软件

    LaunchFaster 启动器是本人近期编写的一款windows平台上快速启动应用的开源工具软件. LaunchFaster 启动器是一款类似于 Rolan 和 音速启动 和 Lily 的图标形式的 ...

  6. SOJ 4552 [期望,概率]

    题目链接:[http://acm.scu.edu.cn/soj/problem.action?id=4552] 题意:给你n种卡牌,每种卡牌有无限多个,每次从中抽取一张卡牌,问:1.集齐这n种卡牌需要 ...

  7. 开发类似"音速启动"的原创工具简码"万能助手"的过程中对ztree.js与win标准控件treeview、HTMLayout树形框等优缺点的比较

    在开发类似"音速启动"的桌面快捷方式管理软件简码"万能助手"的早期规划中,曾经考虑过几种树形框方案: ztree.js.win标准控件treeview.HTML ...

  8. 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 ...

  9. SOJ 4482 忽悠大神【最小生成树】

    题目链接: http://acm.scu.edu.cn/soj/problem.action?id=4482 题意: 给定边权和点权,从一个点出发并回到该点,减少尽量多的边,每路过点和边都要把权重加到 ...

随机推荐

  1. $.extend(x,y); 函数用法介绍。

    第一篇资料:  转自: https://www.cnblogs.com/yuqingfamily/p/5813650.html 语法:jQuery.extend( [deep ], target, o ...

  2. VMware虚拟机中涉及的3种常见网络模式

    桥接模式.这种模式下,虚拟机和物理机连的是同一个网络,虚拟机和物理机是并列关系,地位是相当的.比如你家如果有用路由器,那么你的电脑和你的手机同时连接这个路由器提供的Wi-Fi,那么它们的关系就是这种模 ...

  3. hibernate与struts2整合中出现问题以及一级缓存查询数据在业务层问题

    直接上问题: org.hibernate.HibernateException: HHH000142: Javassist Enhancement failed: cn.xxx.pojo.Custom ...

  4. 表单<form></form>提交方式的区别

    <form action="" method="get/post"> 表单<form></form>的提交方式有两种:pos ...

  5. 学习笔记 第六章 使用CSS美化图片

    第六章  使用CSS美化图片 6.1  在网页中插入图片 GIF图像 跨平台能力,无兼容性问题: 具有减少颜色显示数目而极度压缩文件的能力,不会降低图像的品质(无损压缩): 支持背景透明功能,便于图像 ...

  6. 使用Jquery1.9 版本 来实现全选

    在使用Jquery实现全选以及反选的时候, 使用attr()实现的时候,在浏览器第一次运行可以全选,但是第二次再全选,不管用.  通过查找资料,用 prop()方法代替attr()方法就行了. 注意: ...

  7. LoadRunner10自带的WEBTOURS,无法显示Flights页面问题解决办法

    [问题描述] 安装LoadRunner10之后,尝试打开自带的webTours页面学习.第一次可以打开,之后安装了一RFT.Oracle等软件,就出现页面无法显示问题.一直以为是Java的问题,尝试各 ...

  8. Activiti数据库表结构(表详细版)

    http://blog.csdn.net/hj7jay/article/details/51302829 1  Activiti数据库表结构 1.1      数据库表名说明 Activiti工作流总 ...

  9. PowerDesigner 操作手册

    1.错误信息:Generation aborted due to errors detected during the verification of the model 解决方案: 把检查模型的选项 ...

  10. java was started but returned exit code =-805306369的处理方法

    Myeclipse出现java was started but returned exit code =-805306369的错误,如图: 解决方法: 换个workspaces:换个工作目录,估计估计 ...