标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 289 Accepted Submission(s): 135
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 const int M = 1e5 + 10 , mod = 258280327 ; 6 int n , A , B ; 7 int a[M] ; 8 int dp[2][10][10] ; 9 int get (int x) { 10 return x/10 + x%10 ; 11 } 12 13 //void solve () { 14 // int cur = 0, nxt = 1; 15 // dp[0][0][0] = 1 ; 16 // for(int i = 1 ; i <= n ; i ++) { 17 // for (int j = 0 ; j < 10 ; j ++) { 18 // for (int k = 0 ; k < 10 ; k ++) if (dp[i - 1][j][k] > 0) { 19 // dp[i][ get(j+a[i]) ][k] = (dp[i][ get(j+a[i]) ][k] + dp[i-1][j][k]) % mod ; 20 // dp[i][j][ get(k+a[i]) ] = (dp[i][j][ get(k+a[i]) ] + dp[i-1][j][k]) % mod ; 21 // } 22 // } 23 // } 24 // //cout << dp[n][A][B] << " " << dp[n][A][0] << " " << dp[n][0][B] << endl ; 25 // printf ("%d\n" , ((dp[n][A][B] + dp[n][A][0]) % mod + dp[n][0][B]) % mod) ; 26 //} 27 28 void add (int &x , int y) { 29 x += y ; 30 if (x > mod) x -= mod ; 31 } 32 33 void solve () { 34 int cur = 0 , nxt = 1 ; 35 memset (dp[cur] , 0 , sizeof(dp[cur])) ; 36 dp[cur][0][0] = 1 ; 37 for (int i = 1 ; i <= n ; i ++) { 38 memset (dp[nxt] , 0 , sizeof(dp[nxt])) ; 39 for (int j = 0 ; j < 10 ; j ++) { 40 for (int k = 0 ; k < 10 ; k ++) { 41 if (dp[cur][j][k] == 0) continue ; 42 add (dp[nxt][ get(j+a[i]) ][k] , dp[cur][j][k]) ; 43 add (dp[nxt][j][ get(k+a[i]) ] , dp[cur][j][k]) ; 44 } 45 } 46 swap (cur , nxt) ; 47 } 48 printf ("%d\n" , ((dp[cur][A][B] + dp[cur][A][0]) % mod + dp[cur][0][B]) % mod) ; 49 } 50 51 int main () { 52 int T ; 53 scanf ("%d" , &T ) ; 54 while (T --) { 55 scanf ("%d%d%d" , &n , &A , &B) ; 56 for (int i = 1 ; i <= n ; i ++) { 57 scanf ("%d" , &a[i]) ; 58 //memset (dp[i] , 0 , sizeof(dp[i])) ; 59 } 60 a[0] = 0 ; 61 solve () ; 62 } 63 return 0 ; 64 }
2015多校.Zero Escape (dp减枝 && 滚动数组)
标签:
原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4728446.html