zoukankan      html  css  js  c++  java
  • T107511 花朵

    题目链接

    满分做法:

    考虑DP,dp[i]表示表示前i个符合条件的最小合并次数,再记录一个minn[i]表示仅考虑前 i 朵小花,在操作次数最少的前提下,最终合并得到的最右的小花的最低美丽值。

    倒叙转移,保证最小合并次数的前提下,最右值最小。

    #include<queue>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    const int maxm=5e4+7;
    int n;
    int a[maxm];
    int dp[maxm],minn[maxm];//dp[i]表示前i个符合条件的最小合并次数,minn[i]表示仅考虑前 i 朵小花,在操作次数最少的前提下,最终合并得到的最右的小花的最低美丽值 
    int sum[maxm];
    int main()
    {
     scanf("%d",&n);
     for(int i=1;i<=n;i++)
     scanf("%d",a+i),sum[i]=sum[i-1]+a[i];
     memset(dp,63,sizeof(dp));
     dp[1]=dp[0]=0;
     minn[1]=a[1];
     for(int i=2;i<=n;i++)
     {
      for(int j=i-1;j>=0;j--)
      {
         if(minn[j]<=sum[i]-sum[j])
         {
           if(dp[j]+i-j-1<dp[i])
           dp[i]=dp[j]+i-j-1,minn[i]=sum[i]-sum[j];
         }
      }
     }
     printf("%d
    ",dp[n]);
     return 0;	
    }
    
  • 相关阅读:
    函数
    字符串格式化
    集合
    习题02
    int/str/list/tuple/dict必会
    元组/字典
    列表方法
    练习题(format、expandtabs、片层)
    字符串方法
    JMM
  • 原文地址:https://www.cnblogs.com/lihan123/p/11803415.html
Copyright © 2011-2022 走看看