码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #256 (Div. 2) C. Painting Fence (搜索 or DP)

时间:2015-07-14 18:04:14      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:codeforces

【题目链接】:click here~~

【题目大意】:题意:你面前有宽度为1,高度给定的连续木板,每次可以刷一横排或一竖列,问你至少需要刷几次。

Sample Input

Input
5
2 2 1 2 1
Output
3
Input
2
2 2
Output
2
Input
1
5
Output
1

搜索:

// C
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif

#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif

// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>

#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif

using namespace std;
#define rep(i,j,k) for(int i=j;i<=k;++i)
#define per(i,j,k) for(int i=(int)j;i>(int)k;--i)

#define lowbit(a) a&-a
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long LL;
typedef unsigned long long LLU;
typedef double db;

const int N=5*1e3+10;
LL n,m,t,ans,res,cnt,tmp;

LL num[N];
char str[N];
bool vis[N];

int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};

LL dfs(LL left,LL right)
{
    LL heng=0,temp=left;
    LL Min_gun=*min_element(num+left,num+right+1);
    rep(i,left,right){
        num[i]-=Min_gun;
    }
    rep(i,left,right){
        if(num[i]==0){
            heng+=dfs(temp,i-1);
            temp=i+1;
        }
    }
    if(temp<=right) heng+=dfs(temp,right);
    return min(heng+Min_gun,right-left+1);
}
int main()
{
    while(scanf("%lld",&n)!=EOF)
    {
        rep(i,0,n-1){
            scanf("%lld",&num[i]);
        }
        LL result=dfs(0,n-1);
        printf("%lld\n",result);
    }
    return 0;
}
/*首先找到n条木条最短的木条i,
然后减去它的值,再查找1到i-1,和i+1到n的最小值,由于可以竖着刷,因此比较
刷完这段区间的横着刷和竖着刷的最小值。最终即为答案。
5
2 2 1 2 1
5
1 2 3 2 1
5
3 2 1 2 3

3
3
5
*/


版权声明:本文为博主原创文章,未经博主允许不得转载。

Codeforces Round #256 (Div. 2) C. Painting Fence (搜索 or DP)

标签:codeforces

原文地址:http://blog.csdn.net/u013050857/article/details/46879975

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!