思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160

动态规划。状态dp[i]表示 前i个数的合法的方案数,转移是

dp[i] = sum{ dp[k] | 1 < k < i && sum(k+1,i)!=0 }

= sum{ dp[k] | 1 < k < i } - sum{ dp[k] | 1 < k < i && sum(k+1,i)==0 }

关键是求后半部分怎么找到sum(k+1,i)==0 的k, 等价于找 prefixSum(k)== prefixSum(i),因为这里前缀比后缀维护容易。利用容器map M, M[ps] = sum{dp[k] | prefixSum(k)==ps }。 那么 dp[i] = sum{ dp[k] | 1 < k < i } - M[prefixSum(i)]。

实现:

 #include <iostream>
#include <cstdio>
#include <map>
using namespace std; const int mod = 1e9 + ;
int a[], s[], dp[], n, total;
map<int, int> g; int solve()
{
total = dp[] = ;
g[] = ;
for (int i = ; i <= n; i++)
{
if (!g.count(s[i]))
g[s[i]] = ;
dp[i] = ((total - g[s[i]]) % mod + mod) % mod;
g[s[i]] = (g[s[i]] + dp[i]) % mod;
total = (total + dp[i]) % mod;
}
return dp[n];
} int main()
{
cin >> n;
for (int i = ; i <= n; i++)
{
scanf("%d", &a[i]);
s[i] = s[i - ] + a[i];
}
cout << solve() << endl;
return ;
}

最新文章

  1. ASP.NET关于对excel数据导入到数据库
  2. [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
  3. CPU informition
  4. druid 源码分析与学习(含详细监控设计思路的彩蛋)(转)
  5. 成功移植SQLite3到ARM Linux开发板
  6. UVA 11426 GCD-Extreme(II) ★ (欧拉函数)
  7. C++ - 内置类型的最大值宏定义
  8. c#一个简单的实例告诉你,多继承还可以这么来
  9. IIS7和Tomcat7整合,即IIS7和Tomcat共用80端口
  10. 「mysql优化专题」你们要的多表查询优化来啦!请查收(4)
  11. Oracle数据文件丢失,数据库如何打开或恢复
  12. (八) Usb摄像头描述符解析
  13. 读取FTP 图片文件,并显示,非下载
  14. Spring-Cloud-Netflix
  15. VirtualBox虚拟机网络设置说明
  16. ztree实现中国省市区树形,可多选
  17. solr(五): centos中, 整合 tomcat&amp;solr
  18. 最简单的HashMap底层原理介绍
  19. 关于git中Pageant开机启动且自动关联秘钥
  20. 分享:Oracle 系统变量函数用法说明

热门文章

  1. Python作业之购物商城
  2. CodeForces-816B:Karen and Coffee (简单线段树)
  3. vue之安装配置
  4. centos7 &amp;&amp; centos6.5部KVM使用NAT联网并为虚拟机配置firewalld &amp;&amp; iptables防火墙端口转发
  5. bzoj4516
  6. vs2008打开类视图,看不到类的解决方法
  7. iOS---UICollectionView Class Reference---UICollectionView 类参考文档
  8. 基于事件驱动机制,在Service Mesh中进行消息传递的探讨
  9. HDOJ5020【几何】
  10. POJ3186【区间DP】