zoukankan      html  css  js  c++  java
  • codeforces C. Painting Fence

    http://codeforces.com/contest/448/problem/C

    题意:给你n宽度为1,高度为ai的木板,然后用刷子刷颜色,可以横着刷、刷着刷,问最少刷多少次可以全部刷上颜色。

    思路:dp[i][j] 表示在第i列以后的木板都已刷完且第j列的木板是横着刷的,最少需要的次数。如果a[i]>=a[j]的情况,比较再竖着刷一次和横着刷哪一个情况次数少。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <algorithm>
     5 #define maxn 1000100
     6 #define ll long long
     7 using namespace std;
     8 const int inf=1<<30;
     9 
    10 int n;
    11 ll a[maxn];
    12 ll dp[5001][5001];
    13 
    14 int main()
    15 {
    16     scanf("%d",&n);
    17     for(int i=1; i<=n; i++)
    18     {
    19         cin>>a[i];
    20     }
    21     a[0]=0;
    22     for(int i=0; i<=n; i++)
    23     {
    24         dp[n][i]=0;
    25     }
    26     for(int i=n; i>=1; i--)
    27     {
    28        for(int j=0; j<=n; j++)
    29        {
    30            if(a[j]>=a[i])
    31            {
    32                dp[i-1][j]=dp[i][i];
    33            }
    34            else dp[i-1][j]=min(dp[i][j]+1,dp[i][i]+a[i]-a[j]);
    35        }
    36     }
    37     cout<<dp[0][0]<<endl;
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    HPA
    docker 入门
    idea手动保存文本
    mac下安装配置sql plus
    oracle序列
    oracle存储过程
    Java正则表达式
    expect命令
    关于OneDrive/GoogleDrive推送的定价方案征询
    存储设备故障已修复,及对用户的补偿措施
  • 原文地址:https://www.cnblogs.com/fanminghui/p/4334550.html
Copyright © 2011-2022 走看看