zoukankan      html  css  js  c++  java
  • 10.16 动态规划(一)

    区间DP

    P1220  关路灯

    代码:

    ```cpp
    #include <cstdio>
    #include <cstring>
    
    #define min(a,b) ((a)<(b)?(a):(b))
    
    typedef long long ll;
    const int N = 55;
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    ll f[N][N][2];
    int P[N], L[N], n, c, pre[N];
    
    int main(){
        scanf("%d%d", &n, &c);
        for(int i = 1; i <= n; ++i){
            scanf("%d%d", L+i, P+i);
            pre[i] = pre[i-1] + P[i];
        }
        
        for(int l = 1; l <= n; ++l){
            for(int i = 1, j; (j = i + l - 1) <= n; ++i){
                if(i <= c && c <= j){
                    f[i][j][0] =
                        min(
                            f[i+1][j][0] + (L[i+1] - L[i]) * (pre[n] - pre[j] + pre[i]), 
                            f[i+1][j][1] + (L[j] - L[i]) * (pre[n] - pre[j] + pre[i])
                        );
                    f[i][j][1] =
                        min(
                            f[i][j-1][0] + (L[j] - L[i]) * (pre[n] - pre[j-1] + pre[i-1]), 
                            f[i][j-1][1] + (L[j] - L[j-1]) * (pre[n] - pre[j-1] + pre[i-1])
                        );
                }else{
                    f[i][j][0] = f[i][j][1] = INF;
                }
            }
        }
        
        printf("%lld
    ", min(f[1][n][0], f[1][n][1]));
        
        return 0;
    }
    ```
    View Code

    CQOI2007  涂颜色

    P3205  合唱队

    SCOI2003

    #include <cstdio>
    #include <cstring>
    
    const int N = 105, INF = 0x3f3f3f3f;
    int f[N][N];
    char s[N];
    int n;
    int nl[N];
    
    void chkmn(int &a, int b) {
        if (a > b) a = b;
    }
    
    bool check(char s[], int n, int len) {
        for (int i = len; i < n; ++i) {
            if (s[i] != s[i % len]) return false;
        }
        return true;
    }
    
    int main() {
        scanf("%s", s);
        n = strlen(s);
    
        for (int i = 1; i <= 9; ++i)
            nl[i] = 1;
        for (int i = 10; i <= 99; ++i)
            nl[i] = 2;
        nl[100] = 3;
    
        memset(f, 0x3f, sizeof(f));
        for (int i = 0; i < n; ++i) {
            f[i][i] = 1;
        }
    
        for (int l = 2; l <= n; ++l) {
            for (int i = 0, j; (j = i + l - 1) < n; ++i) {
                for (int k = i; k < j; ++k) {
                    chkmn(f[i][j], f[i][k] + f[k + 1][j]);
                }
    
                for (int k = i; k < j; ++k) {
                    int len = k - i + 1;
                    if (l % len != 0) continue;
                    if (check(s + i, l, len)) {
                        chkmn(f[i][j], f[i][k] + 2 + nl[l / len]);
                    }
                }
            }
        }
    
        printf("%d
    ", f[0][n - 1]);
    }

    状态压缩DP

    SCOI2005 互不侵犯

    SCOI2007 排列

    ans一开始为所有数字都用上,余数为0的方法数

    c[i]这部分可删去(无用)

    i | (1 << k)  按位或(往i里面加一个数的二进制表达),且(1 << k)不能在i里面,所以要判断

    i,j,k,分别枚举数,余数,选择的第几个数

  • 相关阅读:
    AgularJS中Unknown provider: $routeProvider解决方案
    AngularJS依赖注入
    下面是Webstorm的一些常用快捷键:
    加载多张图片,判断加载完成状态
    JS控制图片显示的大小(图片等比例缩放)
    JS中两个重要的方法 call & apply 学习
    如何用微软雅黑显示自己网页的字体
    Dev-C++的一些使用技巧快捷键
    C C语言中 *.c和*.h文件的区别!
    HTML <!--...--> 注释 、CSS/JS //注释 和 /*.....*/ 注释
  • 原文地址:https://www.cnblogs.com/zyddd915/p/11684903.html
Copyright © 2011-2022 走看看