codeforces 229/D 动态规划
来源:互联网 发布:windows系统文件损坏 编辑:程序博客网 时间:2024/05/29 06:49
题目链接:http://codeforces.com/problemset/problem/229/D
题意:
这个城市有n座塔,为了美观,需要后面的塔不能比前面的塔矮,所以需要你来整理,你的操作方式是可以把任意一个塔放到他相邻的一座塔上,组成一座新塔,
注意只能移到相邻的塔上,新塔还能继续移动,问你最少多少步可以完成
思路:
一开始我天真的以为是贪心,想在O(n)的复杂度上解决他,代码也写出来了,过了很多组数据,CF给后台,当我看那组我WA的数据的时候,我才意识到我的思路是完全错的,就扔掉了,过了好几个月才捡起来想了个DP的解法:
二维DP,dp[i][j]:i表示第i座塔移动的j步,他能达到的最矮的情况,dp不断更新,跑一遍O(n^2)能解决,
#include <bits/stdc++.h>using namespace std;int dp[5002][5002];//第i个塔,用了j步骤的高度,向前压,向后压const int inf=0x7f7f7f7f;class Solution{ int n,a[5002];public: Solution(int _n):n(_n) { for(int i=0; i<n; ++i) scanf("%d",&a[i]); memset(dp,0x7f,sizeof(dp));//字节赋值 dp[0][0]=a[0]; } void win() { for(int i=1; i<n; ++i) //枚举塔 for(int j=0; j<i; ++j) //枚举前点 { if(dp[i-1][j] == inf) continue; if(a[i] < dp[i-1][j]) { dp[i][j+1]=min(dp[i-1][j]+a[i],dp[i][j+1]);//先直接加到前面,后面再决策他是否最优 int k=0,rp=a[i];//向后找 while(rp<dp[i-1][j]) rp+=a[(++k) + i]; if(rp<dp[i-1][j])//后面所以的值都加起来都没前面的高,这个情况应舍弃 continue; dp[i+k][j+k]=min(rp,dp[i+k][j+k]); } else dp[i][j]=a[i]; } for(int i=0; i<=5000; ++i) if(dp[n-1][i]<inf) { printf("%d\n",i); break; } }};int main(){ int n; while(scanf("%d",&n)==1) { Solution OMG(n); OMG.win();//OMG必胜,S5冠军,加油! } return 0;}
1 0
- codeforces 229/D 动态规划
- Codeforces 611D 动态规划
- codeforces D. Palindrome pairs 动态规划
- codeforces #186 D 动态规划(DP)
- codeforces 4D Mysterious Present -- 动态规划
- Codeforces 474D Flowers 动态规划法
- codeforces 484D Kindergarten 【动态规划】
- Codeforces 809D [平衡树][动态规划]
- codeforces 303 D. Ilya and Roads(动态规划)
- Codeforces 448D(动态规划、类H数)
- Codeforces 379D. New Year Letter【动态规划、暴力枚举】
- CodeForces - 148D Bag of mice(动态规划)
- 【动态规划】【数位DP】[Codeforces 55 D]Beautiful numbers
- CodeForces 273D|Dima and Figure|动态规划
- CODEFORCES 430D Working out <动态规划 + 分治>
- 动态规划D
- codeforces #304D 546D. Soldier and Number Game(数论+动态规划+前缀和)
- Codeforces #264 (Div. 2) D. Gargari and Permutations(动态规划:简单)
- python初码
- Redis基础命令
- epoll详解
- java学习篇-----图形用户界面基础:0
- 【leetcode】 Anagrams
- codeforces 229/D 动态规划
- leetcode 40: Combination Sum II
- 自我积累
- 关于ios中1x、2x、3x图片适配,只用一张搞定
- 保存 web.xml 卡
- 67 三角形面积
- 理论:如何调整四轴4个电机的转速,使飞行器朝不同方向运动
- iOS开发18:UITableView中行的操作
- win2008安装oracle11g