#include<cstdio> #include<vector> #include<algorithm> using namespace std; vector<int> sk; vector<long long int> sums; long long int dv; int test_old(int j, int i) { long long int sm = 0; for(int k=j; k<=i; ++k) sm = (sm+sk[k])%dv; return (sm%dv%2 == 0 ? 1 : 0); } int test(int j, int i) { if(!j) return (sums[i]%dv%2 == 0 ? 1 : 0); return ((sums[i]-sums[j-1])%dv%2 == 0 ? 1 : 0); } int main() { int n; dv = 1000000007; scanf("%d", &n); sk.resize(n); sums.resize(n); for(int ii=0; ii<n; ++ii) { scanf("%d", &sk[ii]); if(!ii) sums[0]=sk[0]; else sums[ii]=sk[ii]+sums[ii-1]; // printf("%lld ", sums[ii]); } // printf("\n"); // for(int ii=0; ii<n; ++ii) { // for(int jj=ii; jj<n; ++jj) // printf("(%d %d) ", test(ii, jj), test_old(ii, jj)); // printf("\n"); // } vector<long long int> f(n); f[0] = test(0,0); for(int ii=1; ii<n; ++ii) { f[ii] = test(0,ii); for(int jj=1; jj<=ii; ++jj) if(test(jj, ii)) f[ii] = (f[ii]+f[jj-1])%dv; // printf("%lld\n", f[ii]); } printf("%lld\n", f[n-1]); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include<cstdio> #include<vector> #include<algorithm> using namespace std; vector<int> sk; vector<long long int> sums; long long int dv; int test_old(int j, int i) { long long int sm = 0; for(int k=j; k<=i; ++k) sm = (sm+sk[k])%dv; return (sm%dv%2 == 0 ? 1 : 0); } int test(int j, int i) { if(!j) return (sums[i]%dv%2 == 0 ? 1 : 0); return ((sums[i]-sums[j-1])%dv%2 == 0 ? 1 : 0); } int main() { int n; dv = 1000000007; scanf("%d", &n); sk.resize(n); sums.resize(n); for(int ii=0; ii<n; ++ii) { scanf("%d", &sk[ii]); if(!ii) sums[0]=sk[0]; else sums[ii]=sk[ii]+sums[ii-1]; // printf("%lld ", sums[ii]); } // printf("\n"); // for(int ii=0; ii<n; ++ii) { // for(int jj=ii; jj<n; ++jj) // printf("(%d %d) ", test(ii, jj), test_old(ii, jj)); // printf("\n"); // } vector<long long int> f(n); f[0] = test(0,0); for(int ii=1; ii<n; ++ii) { f[ii] = test(0,ii); for(int jj=1; jj<=ii; ++jj) if(test(jj, ii)) f[ii] = (f[ii]+f[jj-1])%dv; // printf("%lld\n", f[ii]); } printf("%lld\n", f[n-1]); return 0; } |