【算法设计题目】——贪心,搜索

怒漆

原题: Codeforces Round #256 (Div. 2) C. Painting Fence(分治贪心)

参考链接:

http://blog.csdn.net/u012860063/article/details/37967187

http://blog.csdn.net/modiz/article/details/37938313

http://blog.csdn.net/u011466175/article/details/38080005

http://www.bubuko.com/infodetail-970683.html

http://blog.csdn.net/kalilili/article/details/46696417

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 5005
#define INF 0x3fffffff
int a[N];

int solve(int left, int right)
{
	if(left>right)
	{
		return 0;
	}
	int answer = 0, min = INF;
	for(int j =left;j<=right;j++)
	{
		if(a[j]<min)
		{
			min = a[j];
		}
	}
	answer += min;
	for(int i=left;i<=right;i++)
	{
		a[i] -= min;
	}
	
	int begin = left;

	for(int k=left;k<=right;k++)  //会漏掉右边没有出现0的情况
	{
		if(a[k] == 0)
		{
			answer += solve(begin, k - 1);
			begin = k+1;
		}
	}
	if(begin <= right)   //弥补上一种情况
	{
		answer += solve(begin,right);

	}


	answer = answer < (right - left + 1) ? answer : (right - left + 1);
	
	return answer;
}
int main()
{
	int n;
	cin >> n;
	for(int i=0;i<n;i++)
	{
		cin >> a[i];
	}
	cout << solve(0, n - 1) << endl;
	cin >> n;
	return 0;
}

//参考链接:
//http://blog.csdn.net/modiz/article/details/37938313
//http://blog.csdn.net/u012860063/article/details/37967187
//http://blog.csdn.net/u011466175/article/details/38080005
posted @ 2017-10-08 00:21  考拉小无  阅读(159)  评论(0)    收藏  举报