USACO 奶牛抗议 Generic Cow Protests
USACO 奶牛抗议 Generic Cow Protests
Description
约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动。第i头奶牛的理智度 为Ai,Ai可能是负数。约翰希望奶牛在抗议时保持理性,为此,他打算将所有的奶牛隔离成 若干个小组,每个小组内的奶牛的理智度总和都要大于零。由于奶牛是按直线排列的,所以 一个小组内的奶牛位置必须是连续的。
请帮助约翰计算一下,存在多少种不同的分组的方案。由于答案可能很大,只要输出答 案除以1,000,000,009的余数即可。
Input Format
第一行:单个整数:N,1 ≤ N ≤ 10^6
第二行到N + 1行:在第i + 1行有一个整数:Ai,表示第i头奶牛的理智度,−10^5 ≤ Ai ≤ 10^5
Output Format
第一行:单个整数,表示分组方案数除以\(1,000,000,009\)的余数
Sample Input
4
2
3
-3
1
Sample Output
4
Hint
分别是[2 3 − 3 1],[2 3 − 3][1], [2][3 − 3 1],[2][3 − 3] [1]
Solution
本题很容易想到一个\(O(n^2)\)的DP,用\(f[i]\)表示前i个奶牛有几种分组方案,然后枚举\(j\),如果区间\([j+1,i]\)里的奶牛理智和大于零\(f[i]\)就加上\(f[j]\)即:
设\(s[i]\)为前i头奶牛的理智和
\]
实际上\(f[i]\)等于所有满足\(j<i,s[j]<=s[i]\)的\(f[j]\)的总和。
求解\(f[i]\)时位置编号是有序的顺序处理即可,但\(s\)却是无序的且值很大无法解决。
可以发现位置编号很小,如果\(s\)有序而位置编号无序的话可以用树状数组解决。那怎样才能让位置编号无序,\(s\)有序?按\(s\)从小到大排序即可。
Code
#include <cstdio>
#include <algorithm>
#define lowbit(x) ((x)&(-x))
#define LL long long
inline int read(){
int num=0,k=1;char c=getchar();
while (c<'0'||c>'9'){if (c=='-')k=-1;c=getchar();}
while (c>='0'&&c<='9') num=(num<<1)+(num<<3)+c-48,c=getchar();
return num*k;
}
struct info{
LL sum;
int id;
}ox[1000007];
bool cmp(info a,info b){return a.sum<b.sum||(a.sum==b.sum&&a.id<b.id);}
const LL mod=1000000009;
LL n,ans,c[1000007],f[1000007];
int main(){
n=read()+1;
for (int i=2;i<=n;++i)
ox[i].sum=read()+ox[i-1].sum,ox[i].id=i;
ox[1].sum=0,ox[1].id=1;f[1]=1;
std::sort(ox+1,ox+n+1,cmp);
for (int i=1;i<=n;++i){
for (int p=ox[i].id;p;p-=lowbit(p))
f[ox[i].id]=(f[ox[i].id]+c[p])%mod;
for (int p=ox[i].id;p<=n;p+=lowbit(p))
c[p]=(c[p]+f[ox[i].id])%mod;
if (ox[i].id==n) break;
}
printf("%lld\n",f[n]);
}
USACO 奶牛抗议 Generic Cow Protests的更多相关文章
- 洛谷 2344 奶牛抗议 Generic Cow Protests, 2011 Feb
[题解] 我们可以轻松想到朴素的状态转移方程,但直接这样做是n^2的.所以我们考虑采用树状数组优化.写法跟求逆序对很相似,即对前缀和离散化之后开一个权值树状数组,每次f[i]+=query(sum[i ...
- BZOJ2274: [Usaco2011 Feb]Generic Cow Protests
2274: [Usaco2011 Feb]Generic Cow Protests Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 196 Solve ...
- 洛谷 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 cow ...
- 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 cow ...
- [USACO]奶牛抗议(DP+树状数组+离散化)
Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望奶牛在抗议时保持理性,为此,他打算将所有的奶牛隔离成 若干个小组 ...
- [Usaco2011 Feb]Generic Cow Protests
Description Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. ...
- 【bzoj2274】[Usaco2011 Feb]Generic Cow Protests dp+树状数组
题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row andnumbered 1..N. The cows ...
- [USACO11FEB]Generic Cow Protests
思路: 动态规划.首先处理出这些数的前缀和$a$,$f_i$记录从第$1$位到第$i$位的最大分组数量.DP方程为:$f_i=max(f_i,f_j+1)$,其中$j$满足$a_i-a_j≥0$. # ...
- BZOJ 2274 [Usaco2011 Feb]Generic Cow Protests
[题解] 很容易可以写出朴素DP方程f[i]=sigma f[j] (sum[i]>=sum[j],1<=j<=i). 于是我们用权值树状数组优化即可. #include<c ...
随机推荐
- 使用Dapper查询记录是否存在
/// <summary> /// Dapper数据访问抽象基础类 /// </summary> public class DapperHelper { public stat ...
- modbus协议使用小记
下载了libmodbus库,交叉编译后运行,总是接收回复时不正确.原因不明. 由于使用到modbus的需求比较简单,所以选择直接拼出modbus的请求报文,然后用串口直接发送和接收的方式, 拼modb ...
- Filter DSL 常用语法 -- 基本查询语法,必会
转发自:https://www.cnblogs.com/ghj1976/p/5293250.html term 过滤 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed ...
- 【转载】C#中使用decimal.TryParse方法将字符串转换为十进制decimal类型
在C#编程过程中,将字符串string转换为decimal类型过程中,时常使用decimal.Parse方法,但decimal.Parse在无法转换的时候,会抛出程序异常,其实还有个decimal.T ...
- Java 之 Maven 基础
一.Maven 介绍 1.什么是 Maven Maven 是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Projec ...
- springboot中modbus使用
pom.xml配置: false true ias-snapshots Infinite Automation Snapshot Repository true false ias-releases ...
- linux中container_of
linux 驱动程序中 container_of宏解析 众所周知,linux内核的主要开发语言是C,但是现在内核的框架使用了非常多的面向对象的思想,这就面临了一个用C语言来实现面向对象编程的问题,今天 ...
- centos7和centos6安装httpd
编译安装httpd http://apr.apache.org/download.cgi 下载 apr-util-1.6.1.tar.bz2 apr-1.6.5.tar.bz2 http://http ...
- Java自动化环境搭建笔记(1)
Java自动化环境搭建笔记(1) 自动化测试 先搭建java接口测试的环境: 使用mvn命令构建项目 测试集通过testNG.xml组织并运行 测试数据解耦,通过Excel等文件提供 基础依赖 创建m ...
- 卓越Code第一次作业
第一次团队作业 序言 所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign 作业要求 https://w ...