zoukankan      html  css  js  c++  java
  • SRM 551 DIV2

    昨天晚上网络太不给力了,一言难尽啊,泪奔啊

     1 #include <iostream> 
     2 #include <string> 
     3 #include <vector> 
     4 #include <cmath> 
     5 #include <map> 
     6 #include <algorithm> 
     7 using namespace std; 
     8 
     9 int judge[100]; 
    10 class ColorfulBricks { 
    11 public: 
    12   int countLayouts(string bricks) { 
    13     int count = 0; 
    14 
    15 
    16     for (int i = 0; i < 100; i++) { 
    17       judge[i] = 0; 
    18     } 
    19     for (int i = 0; i < bricks.size() ; i++) { 
    20       int tmp = bricks[i] - 'A'; 
    21       judge[tmp]++; 
    22     } 
    23 
    24     for (int i = 0; i < 100; i++) { 
    25       if (judge[i] > 0) 
    26         count++; 
    27     } 
    28     if (count > 2) 
    29       return 0; 
    30     else if (count == 2) 
    31       return 2; 
    32     else 
    33       return 1; 
    34   } 
    35 
    36 };

    第二题

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <map>
     7 #include <algorithm>
     8 #include <list>
     9 using namespace std;
    10 
    11 class ColorfulChocolates {
    12 public:
    13     int max_num(map<int, map<int, int> > judge, int maxSwaps) {//以任意一个为中心,其他的都向它的方向交换
    14         int judge_size = judge.size();
    15         int ctertmp, ctermax;
    16         int step = 0;
    17         ctertmp = 1;
    18         ctermax = 1;
    19         for (int i = 0; i < judge_size; i++) {
    20             int left, right;
    21             left = i - 1;
    22             right = i + 1;
    23             ctertmp = 1;
    24             step = 0;
    25             while (left != -1 || right != judge_size) {
    26                 int tmp;
    27                 if (left != -1 && right != judge_size) {
    28                     tmp = min((judge[i][left] - (i - left)),
    29                             (judge[i][right] - (right - i)));
    30                     if (tmp == (judge[i][left] - (i - left))) {
    31                         left--;
    32                     } else
    33                         right++;
    34 
    35                 } else if (right != judge_size) {
    36                     tmp = (judge[i][right] - (right - i));
    37                     right++;
    38                 } else if (left != -1) {
    39                     tmp = (judge[i][left] - (i - left));
    40                     left--;
    41                 }
    42                 step = step + tmp;
    43                 if (step > maxSwaps)
    44                     break;
    45                 ctertmp++;
    46             }
    47             ctermax = max(ctermax, ctertmp);
    48         }
    49         return ctermax;
    50     }
    51     int maximumSpread(string chocolates, int maxSwaps) {
    52         int myi, myj;
    53         int res = 1;
    54         for (int i = 0; i < 26; i++) {
    55             char tmp = 'A' + i;
    56             map<int, map<int, int> > judge;
    57             myi = myj = 0;
    58             for (int j = 0; j < chocolates.size(); j++) {//构造一个矩阵,记录第i个到第j个的距离
    59                 if (chocolates[j] == tmp) {
    60                     myj = myi;
    61                     for (int k = j + 1; k < chocolates.size(); k++) {
    62                         if (chocolates[k] == tmp) {
    63                             myj++;
    64                             judge[myi][myj] = judge[myj][myi] = k - j;
    65                         }
    66                     }
    67                     myi++;
    68                 }
    69             }
    70             int tmpkaka = max_num(judge, maxSwaps);
    71             res = max(res, tmpkaka);
    72         }
    73         return res;
    74     }
    75 };

     第三题是动态规划的题,代码不想写了http://blog.csdn.net/acm_cxlove/article/details/7831457

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <map>
     7 #include <algorithm>
     8 #include <list>
     9 using namespace std;
    10 #define MOD 1000000007
    11 int dp[3][3][51][51][51];
    12 int cnt[3], n;
    13 class ColorfulCupcakesDivTwo {
    14 public:
    15     int slove(int pos, int pre, int fst, int a, int b, int c) {
    16         if (a < 0 || b < 0 || c < 0)
    17             return 0;
    18         if (pos == n)
    19             return pre != fst;
    20         if (dp[fst][pre][a][b][c] != -1)
    21             return dp[fst][pre][a][b][c];
    22         int ret = 0;
    23         if (pos == 0) {
    24             ret = (ret + slove(pos + 1, 0, 0, a - 1, b, c)) % MOD;
    25             ret = (ret + slove(pos + 1, 1, 1, a, b - 1, c)) % MOD;
    26             ret = (ret + slove(pos + 1, 2, 2, a, b, c - 1)) % MOD;
    27         } else if (pre == 0) {
    28             ret = (ret + slove(pos + 1, fst, 1, a, b - 1, c)) % MOD;
    29             ret = (ret + slove(pos + 1, fst, 2, a, b, c - 1)) % MOD;
    30         } else if (pre == 1) {
    31             ret = (ret + slove(pos + 1, fst, 0, a - 1, b, c)) % MOD;
    32             ret = (ret + slove(pos + 1, fst, 2, a, b, c - 1)) % MOD;
    33         } else if (pre == 2) {
    34             ret = (ret + slove(pos + 1, fst, 0, a - 1, b, c)) % MOD;
    35             ret = (ret + slove(pos + 1, fst, 1, a, b - 1, c)) % MOD;
    36         }
    37         return dp[fst][pre][a][b][c] = ret;
    38     }
    39     int countArrangements(string cupcakes) {
    40         cnt[0] = cnt[1] = cnt[2] = 0;
    41         n = cupcakes.size();
    42         for (int i = 0; i < n; i++)
    43             cnt[cupcakes[i] - 'A']++;
    44         memset(dp, -1, sizeof(dp));
    45         return slove(0, 0, 0, cnt[0], cnt[1], cnt[2]);
    46     }
    47 
    48 };
  • 相关阅读:
    POJ 3140 Contestants Division (树dp)
    POJ 3107 Godfather (树重心)
    POJ 1655 Balancing Act (树的重心)
    HDU 3534 Tree (经典树形dp)
    HDU 1561 The more, The Better (树形dp)
    HDU 1011 Starship Troopers (树dp)
    Light oj 1085
    Light oj 1013
    Light oj 1134
    FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
  • 原文地址:https://www.cnblogs.com/kakamilan/p/2623789.html
Copyright © 2011-2022 走看看