一 题意描述:

有n(1<=n<=5,000)座塔排在一条直线上,从左到右每个塔的高度分别为hi(1<=hi<=100,000),每次操作你可以选择一座塔(假设是第i座),用吊车把它吊起来,然后放到与它相邻的一座塔上(可以是第i-1座也可以是第i+1座),这样,新塔的高度为两座塔的和,完成操作后,塔的总数减少一座。问最少需要多少次操作可以使得所有的塔从左到右形成一个非递减序列。

二 思路分析:

设dp[i]表示使前i座塔呈现非递减所需要的最小步骤数目,那么合并[j,i]座塔需要i-j步.

那么我们可以求得dp方程:dp[i]=min{dp[j]+i-j-1  |  j<i,h(j+1)+h(j+2)+·····+h(i)>=last[j]}

三 源码展示:

 1 #include <cstdio>
 2 int dp[5010],sum[5010],last[5010];
 3 int main()
 4 {
 5     int n;
 6     scanf("%d",&n);
 7     memset(sum,0,sizeof(sum));//把sum首先置为0,然后开始输入数据并逐步累加
 8    dp[0]=0;last[0]=0;
 9     for(int i = 1;i <= n;i++)
10     {
11         int a;
12         scanf("%d",&a);
13         sum[i]=sum[i-1]+a;
14         dp[i]=last[i]=1<<30;//初始值设为2的30次方大
15     }
16     for(int i=1;i<=n;i++)
17     {
18         for(int j=0;j<i;j++)
19         {
20             if(sum[i]-sum[j]>=last[j]&&dp[i]>=dp[j]+i-j-1)
21             {
22                 dp[i]=dp[j]+i-j-1;
23                 if(last(i)>sum[i]-sum[j]) last[i]=sum[i]-sum[j];
24             }
25         }
26     }
27     printf("%d\n",dp[n]);
28     return 0;
29 }

转载于:https://www.cnblogs.com/khbcsu/p/3858122.html

Codeforces 229D相关推荐

  1. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  2. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  3. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  4. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  5. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  6. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  7. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

  8. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  9. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. Shell中要如何调用别的shell脚本
  2. ubuntu下编译安装PHP
  3. 鸿蒙系统平板界面,鸿蒙OS平板UI界面曝光:双Dock栏设计+超级终端互联功能
  4. ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
  5. 【NOIP】提高组2012 同余方程
  6. proguard android 配置,android – Proguard忽略库的配置文件
  7. Mysql内存表主从复制【译】
  8. Mysql库及表的基本概念、增删查改操作以及表的约束、多表联查
  9. Spring4-自动装配Beans-按属性的数据类型自动装配Bean
  10. 【C++笔记】对象模型和this指针
  11. 智能优化算法:鼠群算法
  12. 防火墙限制TCP流量新方法
  13. 加密狗破解原理和破解方法介绍
  14. springboot学习路径 转载子方志朋
  15. Redis 下载与安装(Windows版)
  16. 玩游戏降频?跑分不行?给你的CPU降降压,提提速!
  17. 6个实用的 Python 自动化脚本,告别加班,你学会了吗?
  18. 7.2 异常处理(Exception Handing)
  19. 初学JavaScript之颜色小游戏
  20. Eclipse新建Android项目报错解决方案详细汇总

热门文章

  1. HDU.3652.B-number(数位DP)
  2. hihocoder 1183 割点和割边
  3. 推荐20款基于 jQuery CSS 的文本效果插件
  4. all()是python内置函数吗_Python内置函数all(),python
  5. integer对应java类型_Java中的Integer和int等包装类和基本数据类型简单比较
  6. 阿里云服务器发送邮件失败?连接超时?25端口被封?
  7. 解决HbuiderX将uni-app开发的项目运行到小程序编译后文件vendor.js太大的问题
  8. android intent传对象,startActivityForResult使用, setResult(RESULT_OK)使用,getArguments(),
  9. Highchart series一次只显示一条
  10. java amr 转mp3 报错_amr 转 MP3 报错it.sauronsoftware.jave.InputFormatException问