【 题目描述】
FJ 家的 N 头奶牛正在排队游行抗议。 一些奶牛情绪激动, FJ 测算下来, 排在第 i 位的奶牛的理智
度为 Ai, 数字可正可负。
FJ 希望奶牛在抗议时保持理性, 为此, 他打算将这条队伍分割成几个小组, 每个抗议小组的理智度
之和必须大于或等于零。 奶牛的队伍已经固定了前后顺序, 所以不能交换它们的位置, 所以分在一个小
组里的奶牛必须是连续位置的。 除此之外, 分多少组, 每组分多少奶牛, 都没有限制。
FJ 想知道有多少种分组的方案, 由于答案可能很大, 只要输出答案除以 1000000009 的余数即可。
【 输入格式】
第 1 行一个整数 N;
第 2 行到第 N+1 行,第 i+1 行有一个整数 Ai;
【 输出格式】
输出共一行一个整数: 表示分组方案数模 1000000009 的余数;
【 输入样例】
4 2 3 -
3
1
【 输出样例】
4
【 样例说明】 如果分两组, 可以把前三头分在一组, 或把后三头分在一组; 如果分三组, 可以把中间两
头分在一组, 第一和最后一头奶牛自成一组; 最后一种分法是把四头奶牛分在同一组里。
【 数据规模】
对于 20%的数据: 1≤N≤20;
对于 40%的数据: 1≤N≤1,000;
对于 60%的数据: 1≤N≤10,000;
对于 100%的数据: 1≤N≤100,000; |Ai|≤10,000;
此题很容易想到前缀和思路,只要求出前缀和,用DP求出总数即可,
DP方程也很好推
for(register int i=1;i<=n;i++)
for(register int j=0;j<=i-1;j++){
if(sum[i]<sum[j]) continue;
dp[i]+=dp[j]%1000000009;
}