Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* how many continuous segment of sum zero cf 383D sign is not given we can take any sign on any number */
- ll dp[1001][20051],ans;ll arr[MAX];
- int main()
- {
- booster()
- //read("input.txt");
- int n;
- cin>>n;
- for(int i = 1;i<=n;i++)cin>>arr[i];
- dp[0][0] = 1;
- for(int i = 0;i<=n;i++)dp[i][0] = 1;
- for(int i = 1;i<=n;i++){
- for(int j = 0;j<=10000;j++){
- if(j>=arr[i])
- dp[i][j] += dp[i-1][j-arr[i]] + dp[i-1][j+arr[i]];
- else dp[i][j] += dp[i-1][arr[i] - j] + dp[i-1][j+arr[i]];
- if(dp[i][j]>=mod)dp[i][j]%=mod;
- }
- ans+=dp[i][0] - 1;
- if(ans<0)
- ans += mod;
- if(ans>=mod)ans%=mod;
- }
- cout<<ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement