zoukankan      html  css  js  c++  java
  • SRM 578 div1

    第一次做DIV1,果断爆0。。。弱B的孩子伤不起啊。。。

    275pt那题调了一上午没调出来,明显的傻逼dp就是不会写。。。T_T

    参考DD大神的思路:

    dp[i][j]表示从第i个位置贴一个长度为L的stamp,颜色为j。。。。

    View Code
    class Stamp {
    public:
        int dp[N][4];
        int cc(char c) {
            if(c == 'R')    return 0;
            if(c == 'G')    return 1;
            if(c == 'B')    return 2;
            return 3;
        }
    
        int getMinimumCost(string dc, int sc, int pc) {
            int n = dc.size(), i, j, nj, k, l, t;
            LL ans = inf;
            for(l = 1; l <= n; ++l) {
    
                for(i = 0; i < N; ++i)
                    for(j = 0; j < 3; ++j)
                        dp[i][j] = inf;
    
                for(j = 0; j < 3; ++j) {
                    t = cc(dc[0]);
                    if(t == 3 || t == j)    dp[0][j] = 1;
                }
    
                for(i = 0; i < n; ++i) {
                    for(j = 0; j < 3; ++j) {
                        for(k = i + 1; k <= i + l && k < n; ++k) {
                            if(k + l - 1 >= n)   break;
                            t = cc(dc[k-1]);
                            if(t != 3 && t != j)    break;
                            for(nj = 0; nj < 3; ++nj) {
                                if(k < i + l && nj != j)    continue;
                                t = cc(dc[k]);
                                if(t != 3 && t != nj)   continue;
                                dp[k][nj] = min(dp[k][nj], dp[i][j] + 1);
                            }
                        }
                    }
                }
                /*
                for(i = 0; i < n; ++i) {
                    printf("%d | %d %d %d\n", i, dp[i][0], dp[i][1], dp[i][2]);
                }
                printf("-------------%d-------------\n", l);
                */
                for(j = 0; j < 3; ++j) {
                    bool f = true;
                    for(i = n - l; i < n; ++i) {
                        t = cc(dc[i]);
                        if(t != 3 && t != j)    f = false;
                    }
                    if(f)  ans = Min(ans, LL(dp[n - l][j])*LL(pc) + LL(l*sc));
                }
            }
            return ans;
        }
    };
  • 相关阅读:
    md笔记——HTTP知识
    百万表格难题
    微信接口改良
    md笔记——正则学习
    md笔记——编程术语
    md笔记——微信JS接口
    md笔记——使用 @font-face 引入你喜欢的字体
    博客一年记
    “挨踢”的伙食怎样?
    比尔·盖茨早年
  • 原文地址:https://www.cnblogs.com/vongang/p/2732943.html
Copyright © 2011-2022 走看看