zoukankan      html  css  js  c++  java
  • 448C

    题意:给出宽为1高为Ai的木板n条,排成一排,每次上色只能是连续的横或竖并且宽度为1,问最少刷多少次可以使这些木板都上上色

    分析:刷的第一步要么是所有的都竖着涂完,要么是先横着把最矮的涂完,如果是第一种,那么ans等于n,如果是第二种,那么ans=最矮的高度+被刷掉最矮的后,新的几段不连续木板最小上色次数,所以用分治可以解决这个问题

    AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int maxn=1e5+10;
    int h[maxn],n;
    int paint(int st,int en)
    {
        if(st>en)return 0;
        int _min=1e9,c1=0;
        for(int i=st; i<=en; i++)
            _min=min(h[i],_min);
        c1+=_min;
        for(int i=st; i<=en; i++)
            h[i]-=_min;
        int s=st;
        for(int i=st; i<=en; i++)
        {
            if(i==en&&h[i]!=0)
            {
                c1+=paint(s,i),s=i+1;
            }
            else if(h[i]==0)
            {
                c1+=paint(s,i-1),s=i+1;
            }
        }
        return min(en-st+1,c1);
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n;
        for(int i=1; i<=n; i++)cin>>h[i];
        cout<<paint(1,n)<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    CentOS安装
    java字符串
    h5弹球对战游戏
    看是否健康
    layui社区源码笔记之fly-list
    layui社区源码笔记之user-rank
    layui社区源码笔记之layui-input form
    layui社区源码笔记之fly-tab
    layui社区模板主页框架分析
    分组答辩小程序
  • 原文地址:https://www.cnblogs.com/carcar/p/9948334.html
Copyright © 2011-2022 走看看