CodeForces 448 C.Painting Fence(区间DP)
2017-04-16 15:43
561 查看
Description
一排n块木板,每块木板宽都是一米,第i块木板高a[i]米,每次可以刷连续的任意长度的木板,横着竖着都行,问最少几次可以刷完所有木板
Input
第一行一整数n表示木板数量,之后n个整数a[i]表示第i块木板的长度(1<=n<=5000,1<=a[i]<=1e9)
Output
输出刷完木板所需的最少次数
Sample Input
5
2 2 1 2 1
Sample Output
3
Solution
dp[l][r]表示刷完区间[l,r]所需的最小次数,对于一个区间[l,r],每块木板都竖着刷的话r-l+1次就刷完了,如果横着刷那么必然要把这个区间最短的那块刷完,不然横着刷毫无意义,所以每次对于一个区间,先横着刷,然后把该区间分成若干个区间,把每个区间的dp值加起来再加上横着刷完最短的木板所用的次数和r-l+1比较,选取一个较小值作为刷完这个区间的最优解,时间复杂度O(n^2)
Code
一排n块木板,每块木板宽都是一米,第i块木板高a[i]米,每次可以刷连续的任意长度的木板,横着竖着都行,问最少几次可以刷完所有木板
Input
第一行一整数n表示木板数量,之后n个整数a[i]表示第i块木板的长度(1<=n<=5000,1<=a[i]<=1e9)
Output
输出刷完木板所需的最少次数
Sample Input
5
2 2 1 2 1
Sample Output
3
Solution
dp[l][r]表示刷完区间[l,r]所需的最小次数,对于一个区间[l,r],每块木板都竖着刷的话r-l+1次就刷完了,如果横着刷那么必然要把这个区间最短的那块刷完,不然横着刷毫无意义,所以每次对于一个区间,先横着刷,然后把该区间分成若干个区间,把每个区间的dp值加起来再加上横着刷完最短的木板所用的次数和r-l+1比较,选取一个较小值作为刷完这个区间的最优解,时间复杂度O(n^2)
Code
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; #define INF 0x3f3f3f3f #define maxn 5555 int n,a[maxn]; int Solve(int l,int r) { int Min=a[l]; for(int i=l+1;i<=r;i++)Min=min(Min,a[i]); int ans=Min,pre=l; for(int i=l;i<=r;i++) { a[i]-=Min; if(a[i]==0) ans+=Solve(pre,i-1),pre=i+1; } if(pre<=r)ans+=Solve(pre,r); return min(ans,r-l+1); } int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++)scanf("%d",&a[i]); printf("%d\n",Solve(1,n)); } return 0; }
相关文章推荐
- Codeforces 149D Coloring Brackets 【区间dp】
- codeforces 509F Progress Monitoring (区间dp)
- Codeforces 448 C. Painting Fence
- [区间DP] Codeforces 392E Round #230 (Div. 1) E. Deleting Substrings
- 【记忆化搜索区间dp】CodeForces 149D Coloring Brackets
- CodeForces 149D Coloring Brackets 区间DP
- Codeforces 835D Palindromic characteristics【区间Dp】
- Codeforces 596D 区间DP
- CodeForces 149 D.Coloring Brackets(区间DP)
- Codeforces 509F Progress Monitoring (区间dp 或 记忆化搜索)
- Codeforces 437E The Child and Polygon(区间DP)
- codeforces 448C C. Painting Fence(分治+dp)
- [几何 区间DP] Codeforces 438C & 437E. The Child and Polygon
- Codeforces 607B Zuma(区间DP)
- Codeforces 607B Zuma (区间dp)
- Codeforces 245H 区间DP容斥
- CodeForces 245H (区间dp)
- CodeForces 607B:Zuma(区间DP)
- codeforces 607B 区间dp
- Codeforces 598E Chocolate Bar 【区间dp + 打表】