UVALive - 7484 Association for the Country of Mububa(dp)

来源:互联网 发布:用python进行数据分析 编辑:程序博客网 时间:2024/04/28 10:37

题意就是给你一些数,将这些数划分成n个区间,使得后一个区间里数字的和大于等于前一个区间里数字的和,求n最大;

#include<bits/stdc++.h>#include<string.h>#include<string>#include<cstring>#include<stdio.h>#include<set>#include<vector>#include<algorithm>using namespace std;#define ll long long#define mod 1000000007 int dp[3005];//最大区间数 ll sum[3005];//前缀和 ll ism[30005];//第i个区间最大的值 int main(){    int n;    while(cin>>n)    {        memset(dp,0,sizeof(dp));        memset(sum,0,sizeof(sum));        memset(ism,0,sizeof(ism));        for(int i=1;i<=n;i++)        {            int a;            cin>>a;            sum[i]=sum[i-1]+a;        }        for(int i=1;i<=n;i++)        {            for(int j=i-1;j>=0;j--)            {                if(sum[i]-sum[j]>=ism[j])//i到j区间的数字之和大于等于到第j个数字为止的最后一个区间的和;                {                    dp[i]=dp[j]+1;                    ism[i]=sum[i]-sum[j];                    break;                }            }        }        cout<<dp[n]<<endl;     }    return 0;}
0 0
原创粉丝点击