zoukankan      html  css  js  c++  java
  • CodeForces 229D

    DP

    dp[i]表示对前i座塔进行操作后形成非递减序列所需要的最小操作步数;

    sum[i]表示第i个塔与之前塔的总高度

    h[i]dp最小的情况下表示合并后第I个塔的最小高度

    #include <iostream>
    using namespace std;
    #define MAX 1e8
    int dp[5005],h[5005],sum[5005];
    int main(){
        int n,u;
        while(cin>>n){
            for(int i=1;i<=n;i++){
                cin>>u;
                sum[i]=sum[i-1]+u;
                dp[i]=h[i]=MAX;
            }
            for(int i=1;i<=n;i++){
                for(int j=0;j<i;j++){
                        if(sum[i]-sum[j]>=h[j]&&dp[i]>=dp[j]+i-j-1){
                        dp[i] = dp[j]+i-j-1;
                        if(h[i] > sum[i]-sum[j]) h[i] = sum[i]-sum[j];
                    }
                }
            }
            cout<<dp[n]<<endl;
        }
        return 0;
    }

  • 相关阅读:
    activiti--操作例子
    activiti--服务表
    spring--加载资源文件
    Day17
    Day15
    Day14
    Day13
    Day12
    Day16
    Day11
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3857350.html
Copyright © 2011-2022 走看看