zoukankan      html  css  js  c++  java
  • uvalive 6938 区间dp

    看到n范围和给的区间看着就像区间dp 然后怎么cmp感觉都没法进行区间合并

    n的300误导了下 没有注意离散化之后对时间可以dp

    然而这个dp感觉不太经得起证明的样子...

    dp[i][j] -> 把完全包含在[i,j]里面的区间打完的cost

    那么枚举裂缝 需要加上的是 跨越裂缝的区间的cost 这个没办法做

    可以知道 如果有两个完全不相交的区间 它们肯定会分在裂缝的两边 所以不用管

    所以我们只需要考虑那些 完全连接在一起的区间 选择最贵的一个打掉

    而裂缝肯定在最贵的[l,r]里面

    * 1 区间离散化不影响做题

    * 2 不一定非要泛用决战型枚举裂缝

    int a[305] , b[305] , c[305] ;
    int dp[605][605] ;
    int main () {
        int t = read() ;
        while(t -- ) {
            flc(dp,0) ;
            int n = read() ;
            vector<int> e ;
            rep(i,1,n) {
                a[i]=read(),b[i]=read(),c[i]=read();
                e.pb(a[i]) , e.pb(b[i]) ;
            }
            sort(e.begin(),e.end()) ;
            e.erase(unique(e.begin(),e.end()),e.end()) ;
            rep(i,1,n) {
                a[i] = lower_bound(e.begin(),e.end(),a[i])-e.begin()+1 ;
                b[i] = lower_bound(e.begin(),e.end(),b[i])-e.begin()+1 ;
            }
            int m = e.size();
            rep(len,2,m) {
                rep(i,1,m){
                    int j=i+len-1;
                    if(j>m)break ;
                    int C = -1 ;
                    int l = -1 , r = -1 ;
                    rep(k,1,n) {
                        if(a[k] >= i && b[k] <= j) {
                            if(C < c[k]) {
                                l = a[k] , r = b[k] ; C = c[k] ;
                            }
                        }
                    }
                    if(l == -1) {
                        dp[i][j] = 0 ;
                    }
                    else {
                        dp[i][j] = 999999999 ;
                        rep(k,l,r) {
                            dp[i][j] = min(dp[i][j] , dp[i][k-1] + dp[k+1][j] + C) ;
                        }
                    }
                }
            }
            printf("%d
    " , dp[1][m]) ;
        }
    }
    
  • 相关阅读:
    shell 编程小例子
    第二节,oracle sql编程以及高级
    第一节、oracle的安装及数据库和表的创建,知识整理
    PL/SQL-->UTL_FILE包的使用介绍
    显式游标和隐式游标的区别
    Oracle游标—for、loop、if结合应用
    oracle的用户自定义异常
    使用@property
    使用__slots__限制绑定属性
    给类,实例绑定属性和方法
  • 原文地址:https://www.cnblogs.com/rayrayrainrain/p/7640662.html
Copyright © 2011-2022 走看看