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

相关文章
|
6月前
【洛谷 P2249】【深基13.例1】查找(向量+lower_bound)
**深基13.例1**是关于查找的编程题,要求在单调不减的整数序列中,对每个查询\( q \)返回其首次出现的位置或输出\-1。输入包含序列大小\( n \),查询次数\( m \),以及序列和查询列表。使用`lower_bound`进行二分查找,找到第一个大于等于目标值的元素位置,若找不到或找到的值不等于目标值,则返回\-1。提供的AC代码中,优化了输入读取,并利用`std::vector`和`std::lower_bound`实现了高效解决方案。
40 0
|
7月前
|
Python
PTA-第4章-1 生成3的乘方表
```markdown 给定非负整数n,打印3从0到3^n的幂次方值。输入一行包含n,输出n+1行以&quot;pow(3,i) = &quot;格式显示结果。样例输入3,输出: pow(3,0) = 1 pow(3,1) = 3 pow(3,2) = 9 pow(3,3) = 27 ``` 代码实现如下(Python): ```python n = int(input()) for i in range(n + 1): print(f&quot;pow(3,{i}) = {3**i}&quot;) ```
91 1
|
7月前
|
Serverless
PTA-生成3的乘方表
该代码用于生成3的乘方表,输入非负整数n,输出3的0到n次幂的值。利用`math.pow()`函数计算幂,示例输入3,输出`pow(3,0) = 1`, `pow(3,1) = 3`, `pow(3,2) = 9`, `pow(3,3) = 27`。
76 0
|
人工智能 算法 BI
剑指offer(C++)-JZ66:构建乘积数组(算法-其他)
剑指offer(C++)-JZ66:构建乘积数组(算法-其他)
|
算法 C++
剑指offer(C++)-JZ4:二维数组中的查找(算法-搜索算法)
剑指offer(C++)-JZ4:二维数组中的查找(算法-搜索算法)
华为机试HJ83:二维数组操作
华为机试HJ83:二维数组操作
【链表OJ题 5】牛客 CM11 链表分割
【链表OJ题 5】牛客 CM11 链表分割
|
算法 C++ Python
算法笔记(1)—— 搜索算法:线性搜索(LS)、二分搜索(BS)、记忆化搜索(MS)
算法笔记(1)—— 搜索算法:线性搜索(LS)、二分搜索(BS)、记忆化搜索(MS)
4014 0
|
算法 程序员
【牛客算法BM2】 链表内指定区间反转
你好,欢迎来到我的博客!作为一名程序员,我经常刷LeetCode题目来提升自己的编程能力。在我的博客里,我会分享一些我自己做过的题目和解题思路,希望能够帮助到大家。今天,我想和大家分享一道挑战性较高的题目,让我们一起来挑战一下吧!作者也是在学习的过程中刷到有意思的题目就会选择与大家分享,并且提供较优解,关于力扣 的文章全部放在博客,如果大家喜欢记得支持作者。🤓
|
存储 C++
【 LeetCode 热题 HOT 100】2. 两数相加 (C++ 链表 模拟)
【 LeetCode 热题 HOT 100】2. 两数相加 (C++ 链表 模拟)
162 0
【 LeetCode 热题 HOT 100】2. 两数相加 (C++ 链表 模拟)