Advertisement
Guest User

some1

a guest
Sep 29th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define D(x)        cout<<#x " = "<<(x)<<endl
  5. #define un(x)       x.erase(unique(x.begin(),x.end()), x.end())
  6. #define sf(n)       scanf("%d", &n)
  7. #define sff(a,b)    scanf("%d %d", &a, &b)
  8. #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
  9. #define pb          push_back
  10. #define mp          make_pair
  11. #define xx          first
  12. #define yy          second
  13. #define hp          (LL) 999983
  14. #define MAX         150
  15. #define eps         1e-9
  16. #define pi          acos(-1.00)
  17. #define MOD         1000000007
  18. typedef long long int LL;
  19. typedef pair<int,int> pii;
  20.  
  21. int coin1[MAX+5];
  22. int coin2[MAX+5];
  23.  
  24. const int lim = 15000;
  25.  
  26. int dp1[lim+5];
  27. int dp2[lim+5];
  28.  
  29.  
  30. int main()
  31. {
  32.     //freopen("in.txt", "r", stdin);
  33.  
  34.     int i, j, k;
  35.     int p1, p2;
  36.     int t, cs;
  37.     int n, m, w;
  38.     LL res;
  39.  
  40.     sf(t);
  41.     while(t--)
  42.     {
  43.         sff(n, m);
  44.         sff(k, w);
  45.         memset(dp1, 0, sizeof(dp1));
  46.         memset(dp2, 0 ,sizeof(dp2));
  47.  
  48.         res = 0;
  49.  
  50.         for(i = 1; i <= n; i++) sf(coin1[i]);
  51.         for(j = 1; j <= m; j++) sf(coin2[i]);
  52.  
  53.         dp1[0] = dp2[0] = 1;
  54.         for(int idx = 1; idx <= n; idx++)
  55.             for(int val = lim; val >= 0; val--)
  56.                 if(dp1[val] && val + coin1[idx] <= lim)
  57.                     dp1[val + coin1[idx]] = (dp1[val + coin1[idx]] + dp1[val]) % MOD;
  58.  
  59.         for(int idx = 1; idx <= m; idx++)
  60.             for(int val = lim; val >= 0; val--)
  61.                 if(dp2[val] && val + coin2[idx] <= lim)
  62.                     dp2[val + coin2[idx]] = (dp2[val + coin2[idx]] + dp2[val]) % MOD;
  63.  
  64.  
  65.         for(i = 0; i <= w; i++)
  66.             res = ( res + (LL) dp1[i] * dp2[w-i]) % MOD;
  67.  
  68.         printf("%lld\n", res);
  69.     }
  70.  
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement