zoukankan      html  css  js  c++  java
  • UVa 1291 Dance Dance Revolution

    dp[k][i][j]表示第k步左脚在位置 i,右脚在位置 j 状态时的最小能量消耗.

    dp[k][i][j] = min( dp[ k - 1 ][x][j] + cost[x][ step[k] ], dp[ k - 1 ][i][x] + cost[x][ step[k] ] );

    这题很坑爹的没有数据范围,数组我随便开的,居然1Y了……

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 
     8 const int MAXN = 10010;
     9 const int INF = 1 << 30;
    10 
    11 int step[MAXN];
    12 int dp[MAXN][6][6];
    13 int cost[6][6];
    14 int N;
    15 
    16 void init()
    17 {
    18     for ( int i = 0; i < 5; ++i ) cost[i][i] = 1;
    19     for ( int i = 1; i < 5; ++i ) cost[0][i] = 2;
    20     for ( int i = 1; i < 5; ++i )
    21     {
    22         cost[i][i + 1] = 3;
    23         cost[i + 1][i] = 3;
    24     }
    25     cost[1][4] = 3;
    26     cost[4][1] = 3;
    27     cost[1][3] = 4;
    28     cost[3][1] = 4;
    29     cost[2][4] = 4;
    30     cost[4][2] = 4;
    31 
    32     return;
    33 }
    34 
    35 void DP()
    36 {
    37     dp[0][0][0] = 0;
    38     for ( int k = 1; k < N; ++k )
    39     {
    40         for ( int i = 0; i <= 4; ++i )
    41         {
    42             int j = step[k];
    43             for ( int x = 0; x <= 4; ++x )
    44             {
    45                 dp[k][j][i] = min( dp[k][j][i], dp[k - 1][x][i] + cost[x][j] );
    46                 dp[k][i][j] = min( dp[k][i][j], dp[k - 1][i][x] + cost[x][j] );
    47             }
    48         }
    49     }
    50 
    51     int ans = INF;
    52     for ( int i = 0; i <= 4; ++i )
    53     for ( int j = 0; j <= 4; ++j )
    54         ans = min( ans, dp[N - 1][i][j] );
    55 
    56     printf( "%d\n", ans );
    57 
    58     return;
    59 }
    60 
    61 int main()
    62 {
    63     init();
    64     int a;
    65     while( scanf( "%d", &a ), a )
    66     {
    67         step[1] = a;
    68         N = 1;
    69         while ( scanf( "%d", &step[ ++N ] ), step[N] );
    70 
    71         for ( int i = 0; i <= N; ++i )
    72             for ( int j = 0; j <= 4; ++j )
    73                 for ( int k = 0; k <= 4; ++k )
    74                     dp[i][j][k] = INF;
    75 
    76         DP();
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    mac系统怎么给文件夹加密?mac文件夹加密教程
    android 代码优化:关闭输出日志
    mac下安装eclipse+CDT
    Android JNI MAC OS环境配置
    在mac下设置环境变量
    build_native.py文件分析(2)
    使Android 自带SDK 完美支持HTML5 之 html5webview
    WebView基本使用
    android EditText如何使光标随着输入内容移动
    mac下增加eclipse内存
  • 原文地址:https://www.cnblogs.com/GBRgbr/p/3061647.html
Copyright © 2011-2022 走看看