# P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…

## 题目描述

Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. The cows are conducting another one of their strange protests, so each cow i is holding up a sign with an integer A_i (-10,000 <= A_i <= 10,000).

FJ knows the mob of cows will behave if they are properly grouped and thus would like to arrange the cows into one or more contiguous groups so that every cow is in exactly one group and that every group has a nonnegative sum.

Help him count the number of ways he can do this, modulo 1,000,000,009.

By way of example, if N = 4 and the cows' signs are 2, 3, -3, and 1, then the following are the only four valid ways of arranging the cows:

```(2 3 -3 1)
(2 3 -3) (1)
(2) (3 -3 1)
(2) (3 -3) (1)
Note that this example demonstrates the rule for counting different orders of the arrangements. ```

```4
2
3
-3
1```

`3`

## 说明

【数据规模和约定】

30%的数据满足N≤20

100%的数据满足N≤1000，|Ai|≤100000。

if(dp[j]>0&&sum[i]-sum[j]>=0)

``` 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<queue>
6 using namespace std;
8 {
9     char c='+';int x=0;bool flag=0;
10     while(c<'0'||c>'9')
11     {c=getchar();if(c=='-')flag=1;}
12     while(c>='0'&&c<='9')
13     {x=x*10+(c-48);c=getchar();}
14     flag==1?n=-x:n=x;
15 }
16 int n,m;
17 int a[10001];
18 int dp[10001];
19 int sum[10001];
20 int main()
21 {
22     int i,j,k;
24     for(int i=1;i<=n;i++)
25     {
27         sum[i]=sum[i-1]+a[i];
28         if(sum[i]>=0)
29             dp[i]=1;
30     }
31        for(int i=1;i<=n;i++)
32            for(int j=1;j<i;j++)
33                if(dp[j]>0&&sum[i]-sum[j]>=0)
34                dp[i]=max(dp[i],dp[j]+1);
35     dp[n]==0?printf("Impossible"):printf("%d",dp[n]);
36     return 0;
37 }```

1811 篇文章120 人订阅

0 条评论