zoukankan      html  css  js  c++  java
  • POJ1160

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    #include<vector>
    #define maxn 305
    #define rint register int
    #define ll long long
    #define int unsigned long long
    #define inf 0x77777777777777f
    #define pb push_back
    #define mod (int)1e9 + 7
    using namespace std;
    inline int read()
    {
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    inline void write(int x)
    {
        if(x<0) putchar('-'),x=-x;
        if(x>9) write(x/10);
        putchar(x%10+'0');
        return ;
    }
    
    int v, p, a[maxn], dis[maxn][maxn], f[maxn][maxn];
    //dis[i][j]表示i到j建一个邮局最小距离,f[i][j]表示1到i建j个最小距离和 
    
    signed main()
    {
        v = read(), p = read();
        for (rint i = 1; i <= v; ++i) a[i] = read();
        for (rint i = 1; i <= v; ++i)
          for (rint j = i; j <= v + 1; ++j)
            dis[i][j] = dis[i][j - 1] + a[j] - a[(i + j) / 2];
        memset(f, 0x3f, sizeof(f));
        for (rint i = 1; i <= v; ++i) f[i][1] = dis[1][i];
        for (rint j = 1; j <= p; ++j)
          for (rint i = j; i <= v; ++i)
            for (rint k = j - 1; k <= i - 1; ++k)
              f[i][j] = min(f[i][j], f[k][j - 1] + dis[k + 1][i]);
        write(f[v][p]);
        return 0;
    } 
    View Code
  • 相关阅读:
    「POJ 2699」The Maximum Number of Strong Kings
    「HNOI 2013」切糕
    「PKUSC 2018」真实排名
    「国家集训队 2009」最大收益
    「TJOI2015」线性代数
    「BZOJ 3280」小R的烦恼
    「SDOI 2017」新生舞会
    「六省联考 2017」寿司餐厅
    「TJOI 2013」循环格
    「TJOI 2013」攻击装置
  • 原文地址:https://www.cnblogs.com/mxrmxr/p/11559051.html
Copyright © 2011-2022 走看看