Codeforces 229D Towers 贪心 + dp
来源:互联网 发布:大数据应用101data 编辑:程序博客网 时间:2024/05/12 15:45
题意:有n(1<=n<=5000)个塔,高度为hi,把当前塔放到相邻两个塔(如果存在的话)上的花费为1,问最少需要多少花费能组成不降的序列。
题解:开始想贪心,因为要保证最后面的一个区域内的塔高和最小,贪心到最后可能会有剩余塔高不足的情况,这样如果把它们放到最后一堆就wa了。
想tower[i]表示到达 i 塔时最后一堆的最小高度,dp[i]表示对应的最小花费。
Sure原创,转载请注明出处
#include <iostream>#include <cstdio>#include <memory.h>using namespace std;const int maxn = 5002;int tower[maxn],sum[maxn],dp[maxn];int n;void read(){ memset(dp,0,sizeof(dp)); tower[0] = sum[0] = 0; for(int i=1;i<=n;i++) { scanf("%d",&tower[i]); sum[i] = sum[i-1] + tower[i]; } return;}void solve(){ for(int i=1;i<=n;i++) { for(int j=i-1;j>=0;j--) { if(sum[i] - sum[j] >= tower[j]) { tower[i] = sum[i] - sum[j]; dp[i] = dp[j] + i - j - 1; break; } } } printf("%d\n",dp[n]); return;}int main(){ while(~scanf("%d",&n)) { read(); solve(); } return 0;}
- Codeforces 229D Towers 贪心 + dp
- codeforces 229 D Towers 贪心+DP
- codeforces 229D Towers DP
- 229D - Towers DP
- Codeforces 478D Red-Green Towers dp
- codeforces 478D Red-Green Towers dp
- codeforces 478D Red-Green Towers (dp)
- Codeforces 478D Red-Green Towers (DP)
- Codeforces 478D Red-Green Towers (DP)
- codeforces 478D D. Red-Green Towers(dp)
- codeforces 478D Red-Green Towers(dp)
- Codeforces 478D Red-Green Towers 构造+DP
- codeforces D - Red-Green Towers
- 【CODEFORCES】 D. Red-Green Towers
- D - Red-Green Towers dp
- Codeforces 484D. Kindergarten DP贪心
- Codeforces 265D Good Sequences 贪心+DP
- Codeforces Round #274(Div2) B. Towers 贪心
- hdu 3714 Error Curves(三分)
- CentOS在VirtualBox下修改网络设置
- 数据结构复习(1):内部排序--各类排序算法(C程序)
- json_lib的使用方法
- C++ STL Set使用
- Codeforces 229D Towers 贪心 + dp
- nefu483星际转移问题(分层图网络流)
- C++上机报告 编程序输出各种星号图
- TCP/IP应用程序的通信连接模式
- 指针总结
- 【ios】2个viewController之间传值(segue方式)
- 一,软件工程的概论
- 创新工场笔试题2013年校园招聘
- GIT