洛谷P1569-Generic Cow Protests(一维区间DP)

简介: 洛谷P1569-Generic Cow Protests(一维区间DP)

题目描述:


约翰家的n头奶牛聚集在一起,排成一列,正在进行一项抗议活动。第i头奶牛的理智度为 ai。

约翰希望奶牛在抗议时保持理性,为此,他打算将所有的奶牛隔离成若干个小组,每个小组内的奶牛的理智度总和都要不小于零。

由于奶牛是按直线排列的,所以一个小组内的奶牛位置必须是连续的。请帮助约翰计算一下,最多分成几组。


输入格式:



第一行一个正整数 n,表示牛的数目。

接下来 n 行,每行一个整数,表示每个牛的理智度。


输出格式:


若存在合法分组方案,输出一行一个整数表示答案;否则输出 Impossible


样例输入:


4

2

3

-3

1  


样例输出:



3


说明/提示:

【数据规模和约定】

对于 30% 的数据,1≤n≤20;

对于 100% 的数据,1≤n≤1000,∣ai∣≤105。


AC Code:


#include<bits/stdc++.h>
using namespace std;
#define N 1010
int n,dp[N],sum[N];
int main() {
  scanf("%d",&n);
  for(int i=1;i<=n;i++) {
    scanf("%d",&sum[i]);
    sum[i]+=sum[i-1];//记录每一段的和 
    if(sum[i]>=0) {
      dp[i]=1;//至少分成一组 
    }
  }
  for(int i=1;i<=n;i++) {//遍历1~n 
    for(int j=0;j<i;j++) {//从0到i-1找到第j个数,满足下面的条件 
      if(dp[j]>0&&sum[i]-sum[j]>=0) {
        dp[i]=max(dp[i],dp[j]+1);//状态转移方程 
      }
    }
  }
  if(dp[n]==0) {//无法分组,始终等于0 
    printf("Impossible\n");
  }else {
    printf("%d\n",dp[n]);
  }
  return 0;
}

相关文章
|
1月前
|
人工智能 算法 BI
D - Silver Cow Party——POJ3268(连续用两次Dijkstra算法)
D - Silver Cow Party——POJ3268(连续用两次Dijkstra算法)
|
8月前
华为机试HJ83:二维数组操作
华为机试HJ83:二维数组操作
|
10月前
|
人工智能
POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)
POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)
51nod 1711 平均数(二分 + 树状数组好题)
51nod 1711 平均数(二分 + 树状数组好题)
81 0
|
机器学习/深度学习 Java
【每日一题Day64】LC1799N 次操作后的最大分数和 | 状态压缩dp 状态压缩+dfs+记忆化搜索
每个数字有两种状态,删除或者未删除,因此可以使用状态压缩记录未删除的数字情况state,便于使用位运算进行状态的遍历及转移;使用状态压缩dp找到将所以数字删除的最大分数
87 0
【每日一题Day64】LC1799N 次操作后的最大分数和 | 状态压缩dp 状态压缩+dfs+记忆化搜索
|
SQL Shell
HDU-4348 To the moon(主席树区间修改 永久化标记)
HDU-4348 To the moon(主席树区间修改 永久化标记)
121 0
HDU-4348 To the moon(主席树区间修改 永久化标记)
【CCCC】L3-031 千手观音 (30分) ,离散化,拓扑排序,链式前向星
【CCCC】L3-031 千手观音 (30分) ,离散化,拓扑排序,链式前向星
251 0
codeforces1209——D.Cow and Snacks(并查集)
codeforces1209——D.Cow and Snacks(并查集)
87 0
|
人工智能
Codeforces 220B-Little Elephant and Array-扫描线 & 树状数组
题意: 给出一个长度为n的数组,有m个询问,每次询问给出一个区间,问这个区间内有多少个数x恰好出现x次
107 0
Codeforces 220B-Little Elephant and Array-扫描线 & 树状数组