Kaidul

10616

Jun 19th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <climits>
  15. #include <map>
  16. #include <memory>
  17. #include <queue>
  18. #include <set>
  19. #include <sstream>
  20. #include <stack>
  21. #include <string>
  22. #include <utility>
  23. #include <vector>
  24. #include <iomanip>
  25. using namespace std;
  26. /*** typedef ***/
  27. #define MEMSET_INF 127
  28. #define MEMSET_HALF_INF 63
  29. #define stream istringstream
  30. #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
  31. #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
  32. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  33. #define INF (1<<30)
  34. #define PI acos(-1.0)
  35. #define pb push_back
  36. #define ppb pop_back
  37. #define all(x) x.begin(),x.end()
  38. #define mem(x,y) memset(x,y,sizeof(x))
  39. #define memsp(x) mem(x,MEMSET_INF)
  40. #define memdp(x) mem(x,-1)
  41. #define memca(x) mem(x,0)
  42. #define eps 1e-9
  43. #define pii pair<int,int>
  44. #define pmp make_pair
  45. #define ft first
  46. #define sd second
  47. #define vi vector<int>
  48. #define vpii vector<pii>
  49. #define si set<int>
  50. #define msi map<string , int >
  51. #define mis map<int , string >
  52. typedef long long i64;
  53. typedef unsigned long long ui64;
  54. /** function **/
  55. #define SDi(x) sf("%d",&x)
  56. #define SDs(x) sf("%s",x)
  57. #define SD2(x,y) sf("%d%d",&x,&y)
  58. #define pf printf
  59. #define print(x) pf("%d ", x)
  60. #define println(x) pf("%d\n", x)
  61. #define sf scanf
  62. #define READ(f) freopen(f, "r", stdin)
  63. #define WRITE(f) freopen(f, "w", stdout)
  64.  
  65. /** Main Code **/
  66.  
  67. #define Max 201
  68. #define Query_N 11
  69. #define MOD 21
  70.  
  71. int N, Q, D, M, data[Max], cache[Max][Query_N][MOD];
  72. bool visited[Max][Query_N][MOD];
  73.  
  74. int knapsack(int indx, int taken, int sumModD) {
  75.     if(indx == N + 1) return 0;
  76.     if(taken == 0) {
  77.         if(sumModD == 0) return 1;
  78.         return 0;
  79.     }
  80.     if(visited[indx][taken][sumModD])
  81.         return cache[indx][taken][sumModD];
  82.  
  83.     visited[indx][taken][sumModD] = true;
  84.     return cache[indx][taken][sumModD] = knapsack(indx + 1, taken - 1, (sumModD + data[indx]) % D) + knapsack(indx + 1, taken, sumModD);
  85. }
  86.  
  87. int main() {
  88. #ifndef ONLINE_JUDGE
  89.     READ("input.txt");
  90. #endif
  91.     int caseNo = 0, queryNo;
  92.     while(SD2(N, Q) && N && Q) {
  93.         mem(visited, false);
  94.         rep(i, N) SDi(data[i]);
  95.  
  96.         pf("SET %d:\n", ++caseNo);
  97.         queryNo = 0;
  98.         rep(i, Q) {
  99.             SD2(D, M);
  100.             pf("QUERY %d: %d\n", ++queryNo, knapsack(0, M, 0));
  101.         }
  102.     }
  103.     return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment