洛谷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;
}

相关文章
|
存储 缓存 算法
InnoDB的Buffer Pool
InnoDB的Buffer Pool
162 3
|
编解码 Android开发
Android native层实现MediaCodec编码H264/HEVC
Android平台在上层实现mediacodec的编码,资料泛滥,已经不再是难事,今天给大家介绍下,如何在Android native层实现MediaCodec编码H264/HEVC,网上千篇一律的接口说明,这里不再赘述,本文主要介绍下,一些需要注意的点,权当抛砖引玉,相关设计界面如下:
486 0
|
6月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
261 11
|
11月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
【洛谷 P1443】马的遍历 题解(广度优先搜索)
该问题是一个棋盘上的马的最短路径问题。给定一个$n\times m$的棋盘和起点$(x, y)$,需要计算马到达棋盘上每个位置的最短步数。输入包含$n, m, x, y$,输出是一个矩阵,表示各位置的步数或未可达的$-1$。使用广度优先搜索(BFS)策略,从起点开始遍历,直到访问完所有可达位置。代码中定义了太阳数组表示马的移动方向,并通过队列实现BFS。最后输出格式要求每个数字左对齐且域宽为5。
213 0
|
小程序 安全 数据安全/隐私保护
微信小程序项目实例——密码管理器
微信小程序项目实例——密码管理器
微信小程序项目实例——密码管理器
【Matlab 2019b】Matlab在figure中如何把横坐标或者纵坐标单位转换为10的几次方
本文提供了在Matlab中如何改变图形坐标轴单位的方法,举例说明了如何将横轴刻度标签设置为特定的年份,并调整刻度取值以匹配自变量的变化。
2117 1
|
算法 安全 C语言
【C 言专栏】C 语言中的多线程编程
【5月更文挑战第5天】本文探讨了C语言中的多线程编程,包括多线程概念、通过POSIX线程库和Windows线程库的实现方式、基本步骤(创建、执行、同步、销毁线程)、线程同步机制(互斥锁、条件变量、信号量)以及优点(提高性能、增强并发处理、改善用户体验)。同时,文章指出多线程编程面临的挑战如线程安全、死锁和资源竞争,并提及内存管理问题。通过案例分析和展望未来趋势,强调了掌握多线程编程在提升程序效率和应对复杂任务中的重要性。
622 0
【C 言专栏】C 语言中的多线程编程
|
网络安全 Nacos
对于修改后Nacos端口,连接超时,java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 millisec
对于修改后Nacos端口,连接超时,java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 millisec
|
测试技术 Python
pycharm使用pytest运行测试用例,无法在控制台输出print语句、log语句的解决办法
pycharm使用pytest运行测试用例,无法在控制台输出print语句、log语句的解决办法
964 1