zoukankan      html  css  js  c++  java
  • UVa10618

      这道题不说什么了,自己编的,最后提交成功了。

    // UVa 10618  
    #include <cstdio> 
    #include <cstring> 
    using namespace std; 
    
    const int maxn = 70 + 5; 
    const int INF = 1000; // 1000 > 70 * 7
    const char alpha[] = ".LR"; 
    
    char s[maxn];
    int opt[maxn][4][4][3][4]; 
    int n, c[maxn], d[maxn][4][4][3];
    
    int Energy(int olds, int s, int f, int t) {
      if (olds != s) return 1; 
      else {
        if (f == t) return 3; 
        else if ((f^1) != t) return 5;
        else return 7; 
      }
    }
    
    void update(int t1, int a1, int b1, int s1, int a2, int b2, int s2, int ch) {
      opt[t1][a1][b1][s1][0] = ch; 
      opt[t1][a1][b1][s1][1] = a2; 
      opt[t1][a1][b1][s1][2] = b2; 
      opt[t1][a1][b1][s1][3] = s2;
    }
    
    int dp(int t, int a, int b, int s) {
      int& ans = d[t][a][b][s]; 
      if (ans >= 0) return ans; 
      if (t == n) return ans = 0; 
      ans = INF; 
      if (c[t] == 4) {
        ans = dp(t+1, a, b, 0);
        update(t, a, b, s, a, b, 0, 0); 
        for (int i = 0; i < 4; ++i) if (i != a && i != b) {
          if (b != 2 && ans > dp(t+1, i, b, 1)+Energy(s, 1, a, i)) {
            ans = dp(t+1, i, b, 1)+Energy(s, 1, a, i);   
            update(t, a, b, s, i, b, 1, 1); 
          }
          if (a != 3 && ans > dp(t+1, a, i, 2)+Energy(s, 2, b, i)) {
            ans = dp(t+1, a, i, 2)+Energy(s, 2, b, i); 
            update(t, a, b, s, a, i, 2, 2); 
          }
        }
      } else {
        if ((a == c[t] || (a != c[t] && b != c[t] && b != 2)) && ans > dp(t+1, c[t], b, 1)+Energy(s, 1, a, c[t])) {
          ans = dp(t+1, c[t], b, 1)+Energy(s, 1, a, c[t]); 
          update(t, a, b, s, c[t], b, 1, 1);
        }
        if ((b == c[t] || (b != c[t] && a != c[t] && a != 3)) && ans > dp(t+1, a, c[t], 2)+Energy(s, 2, b, c[t])) {
          ans = dp(t+1, a, c[t], 2)+Energy(s, 2, b, c[t]);
          update(t, a, b, s, a, c[t], 2, 2);   
        }
      }
      return ans; 
    }
    
    void print_ans(int t, int a, int b, int s) {
      if (t == n) return; 
      printf("%c", alpha[opt[t][a][b][s][0]]);
      print_ans(t+1,opt[t][a][b][s][1],opt[t][a][b][s][2],opt[t][a][b][s][3]); 
    }
    
    int main() { 
      while (scanf("%s", s) == 1 && s[0] != '#') {
        n = strlen(s);
        for (int i = 0; i < n; ++i) {
          if (s[i] == '.') c[i] = 4;
          else if (s[i] == 'U') c[i] = 0;
          else if (s[i] == 'D') c[i] = 1;
          else if (s[i] == 'L') c[i] = 2; 
          else c[i] = 3;   
        }
        memset(d, -1, sizeof(d)); 
        dp(0, 2, 3, 0); 
        print_ans(0, 2, 3, 0); 
        printf("
    ");
      }
      return 0;
    }
  • 相关阅读:
    Java控制台五子棋编码学习
    Java Web基础
    JavaScript Unit Test with Mocha
    Cross-browser Testing Tool
    GRIDVIEW 控件
    C# .net ACCESS 网页增删改查 --留言板
    在一般处理文件中访问Session需要添加IRequiresSessionState(转载)
    win7 IIS7 发布网站 出现 "处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误"
    http://www.cnblogs.com/hanshuhe/archive/2012/08/30/vss.html
    win 7 配置 IIS
  • 原文地址:https://www.cnblogs.com/yifeiWa/p/11290195.html
Copyright © 2011-2022 走看看