`
hellojyj
  • 浏览: 61689 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

CodeForces 229D Towers

    博客分类:
  • ACM
 
阅读更多

原题传送门:http://codeforces.com/problemset/problem/229/D

 

 

D. Towers
time limit per test 2 seconds
memory limit per test 256 megabytes
input
standard input
output
standard output

The city of D consists of n towers, built consecutively on a straight line. The height of the tower that goes i-th (from left to right) in the sequence equals hi. The city mayor decided to rebuild the city to make it beautiful. In a beautiful city all towers are are arranged in non-descending order of their height from left to right.

The rebuilding consists of performing several (perhaps zero) operations. An operation constitutes using a crane to take any tower and put it altogether on the top of some other neighboring tower. In other words, we can take the tower that stands i-th and put it on the top of either the (i - 1)-th tower (if it exists), or the (i + 1)-th tower (of it exists). The height of the resulting tower equals the sum of heights of the two towers that were put together. After that the two towers can't be split by any means, but more similar operations can be performed on the resulting tower. Note that after each operation the total number of towers on the straight line decreases by 1.

Help the mayor determine the minimum number of operations required to make the city beautiful.

Input

The first line contains a single integer n (1 ≤ n ≤ 5000) — the number of towers in the city. The next line contains n space-separated integers: the i-th number hi (1 ≤ hi ≤ 105) determines the height of the tower that is i-th (from left to right) in the initial tower sequence.

Output

Print a single integer — the minimum number of operations needed to make the city beautiful.

Sample test(s)
Input
5
8 2 7 3 1
Output
3
Input
3
5 2 1
Output
2

分析:

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

last(i)表示在dp(i)最小的前提下,第i座塔的最低高度。

易知,将[i,j]区间内的塔合并成一座需要j-i步

于是我们得到dp方程:dp(i)=max{dp(j)+i-j+1| j<i, h(j+1)+h(j+2)+...+h(i-1)+h(i) <= last(j)}

注意,我们在递推的过程中要同时记录、更新last(j)的值来确保得到最优解。

 

#include <cstdio>
using namespace std;
int dp[5010],sum[5010],last[5010];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 1;i <= n;i++){
        int a;
        scanf("%d",&a);
         sum[i] = sum[i-1]+a;
         dp[i] = last[i] = 1<<30;
     }
     for(int i = 1;i <= n;i++){
         for(int j = 0;j < i;j++){
             if(sum[i]-sum[j] >= last[j] && dp[i] >= dp[j]+i-j-1){
                 dp[i] = dp[j]+i-j-1;
                 last[i] =sum[i]-sum[j]>last[i]?last[i]:sum[i]-sum[j];
             }
         }
     }
     printf("%d\n",dp[n]);
     return 0;
 }

 


分享到:
评论

相关推荐

    Codeforces 1925D Good Trip 题解

    Codeforces 1925D Good Trip 题解

    Codeforces 题库 101-200

    Codeforces题库101-200介绍了一个在编程竞赛领域非常知名的平台——Codeforces。Codeforces是一个专注于计算机编程的俄罗斯网站,由一组来自萨拉托夫国立大学的竞技体育团队成员领导,由Mikhail Mirzayanov领导。该...

    Codeforces 题库 001-100

    标题 "Codeforces 题库 001-100" 暗示了这里讨论的是Codeforces网站上的前100个编程竞赛题目。Codeforces是一个专注于算法竞赛编程的俄罗斯网站,由来自萨拉托夫国立大学的一群体育爱好者组成,以Mikhail Mirzayanov...

    打codeforces的神器

    打codeforces的神器

    Educational Codeforces Round 157D. XOR Construction

    Educational Codeforces Round 157D. XOR Construction

    codeforces编程网站预测分数插件.zip

    Codeforces是一个广受欢迎的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)社区中备受推崇。这个“codeforces编程网站预测分数插件.zip”文件似乎包含了一个专为Codeforces用户设计的插件,旨在帮助参赛者...

    linkfqy#CSDN_blog_backup#【并查集】Codeforces 566D Restructuring Comp

    【并查集】Codeforces 566D Restructuring Company题面在这里对于本题,只需要再维护一个并查集表示i所在联通块的最右位置因为相邻

    codeforces enhancer 1.1.2

    Codeforces Enhancer 1.1.2是一款专为Google Chrome浏览器设计的插件,旨在提升用户在Codeforces编程竞赛平台上的体验。这个插件的主要目标是通过提供一系列实用功能,帮助程序员更有效地进行代码编写、测试和提交,...

    Codeforces codes_names_Codeforces_

    《Codeforces代码名称解析》 Codeforces是一个全球知名的在线编程竞赛平台,吸引了众多程序员和算法爱好者参与。这里的“codes_names_Codeforces_”标题暗示我们将探讨的是Codeforces平台上一些问题的代码名称。...

    Codeforces 988 D. Points and Powers of Two(数学+结论)

    《Codeforces 988 D. Points and Powers of Two》是一道融合了数学与算法的编程竞赛题目。问题的核心在于找到一个数组中的子序列,使得其中任意两个元素之间的差值都是2的幂次。目标是找到这样的子序列,其长度尽...

    Codeforces题目泛做解题报告许昊然.pdf

    根据提供的文档信息,我们可以推断出这是一份由许昊然撰写的Codeforces题目的解题报告。许昊然是国际信息学奥林匹克(IOI)2012年和2013年的金牌获得者,因此他的解题报告极具参考价值。下面我们将详细解读这份报告...

    Codeforces 185A - Plant 全测试点49个

    Codeforces 185A - Plant 全测试点49个 Codeforces 是一个在线编程平台,提供了大量的编程题目和比赛。其中,185A - Plant 是一个经典的题目,要求编写一个程序来解决植物生长的问题。 在这个题目中,输入是一个...

    Codeforces round 678 D2_Codeforces_

    本次提及的是Codeforces round 678的第二部分(division 2),通常这类比赛会包含四道题目,分别标记为A、B、C和D,难度逐渐递增。 在提供的压缩包文件中,我们看到了四个文件:d.cpp、c.cpp、b.cpp和a.out。这代表...

    codeforces比赛代码

    Codeforces是一个知名的在线编程竞赛平台,它吸引了众多程序员和编程爱好者参与。这里的“codeforces比赛代码”很显然是指在Codeforces平台上参加比赛时编写的各种程序代码。这些代码可能包括解决算法问题、数据结构...

    Codeforces global round 10_Codeforces_

    Codeforces全球第十轮比赛是编程竞赛平台Codeforces举办的一场线上编程比赛,旨在挑战参赛者的算法设计、逻辑思维和编程技巧。在这个比赛中,参赛者通常需要解决一系列算法问题,涵盖数据结构、图论、动态规划、数学...

    一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip

    一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip

    codeforces 19 E Fairy 解题报告

    Codeforces 19 E Fairy 是一道关于图论和二分图的编程竞赛题目。本题要求求解在给定的无向图中,通过删除一条边使得剩余的图成为一个二分图。首先,我们需要理解二分图的概念。二分图是指图中的节点可以分为两个互不...

    codeforces-ACM竞赛题目-2833道.tgz

    codeforces-ACM竞赛题目-2833道.tgz

    Codeforces-149-D-Coloring-Brackets.zip_visual c

    【标题】"Codeforces-149-D-Coloring-Brackets.zip 视觉C++实现" 本问题来源于编程竞赛网站Codeforces上的第149场竞赛中的D题——"Coloring Brackets"(括号着色)。这个问题涉及到动态规划(Dynamic Programming, ...

    Xudong0722#Algorithm_template#codeforces思维题训练合集1

    lucifer1004大佬的博客cf上分攻略故里大佬的githubcf思维题刷题数:44- (1421)codeforces 676 div2 A,B done

Global site tag (gtag.js) - Google Analytics