zoukankan      html  css  js  c++  java
  • CF321E Ciel and Gondolas

     

    CF321E Ciel and Gondolas

    链接

    题解

    本来想练WQS的

    结果还是只会分治

    #include<bits/stdc++.h>
    
    using namespace std;
    
    inline int read()
    {
        int f = 1,x = 0;
        char ch;
        do
        {
            ch = getchar();
            if(ch == '-') f = -1;
        }while(ch < '0' || ch > '9');
        do
        {
            x = (x<<3) + (x<<1) + ch - '0';
            ch = getchar();
        }while(ch >= '0' && ch <= '9');
        return f*x;
    }
    
    const int MAXN = 4000 + 10;
    const int MAXK = 800 + 10;
    
    #define ll long long
    #define re register
    
    int n,k;
    int a[MAXN][MAXN],sum[MAXN][MAXN];
    ll dp[MAXK][MAXN];
    
    inline ll calc(int l,int r)
    {
        return sum[r][r] - sum[r][l-1] -sum[l-1][r] + sum[l-1][l-1];
    }
    
    inline void solve(int x,int L,int R,int l,int r)
    {
        if(L>R||l>r) return;
        int mid = (l+r)>>1,d = 0;
        for(int i=L;i<=R&&i<mid;i++)
        {
            ll res = calc(i+1,mid);
            if(dp[x][mid] > dp[x-1][i] + res)
            {
                dp[x][mid] = dp[x-1][i] + res;
                d = i;
            }
        }
        solve(x,L,d,l,mid-1);solve(x,d,R,mid+1,r);
    }
    
    int main()
    {
        n = read(),k = read();
        for(re int i=1;i<=n;i++) for(re int j=1;j<=n;j++) a[i][j] = read(),sum[i][j] = sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i][j];
        memset(dp,127,sizeof(dp));dp[0][0] = 0;
        for(int i=1;i<=k;i++) solve(i,0,n,1,n);
        printf("%lld
    ",dp[k][n]/2);
    }
  • 相关阅读:
    数量关系
    笨办法学python问题记录
    CSS布局与定位
    python学习 预备篇
    基于hexo搭建个人博客
    CSS常用样式
    计算机组成原理(期末篇)
    Codeblock错误提示栏隐藏
    Markdown标记语言
    笨办法学python(不同版本的python代码差别)
  • 原文地址:https://www.cnblogs.com/wlzs1432/p/12216680.html
Copyright © 2011-2022 走看看