fork download
  1. /// Author : Nguyễn Thái Sơn - K18 - KHMT - UIT
  2. /// Training ICPC 2024
  3.  
  4. #include<bits/stdc++.h>
  5.  
  6. /// #pragma GCC optimize("O3,unroll-loops")
  7. /// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
  8.  
  9. #define fi first
  10. #define se second
  11. #define TASK "paint"
  12. #define pb push_back
  13. #define EL cout << endl
  14. #define Ti20_ntson int main()
  15. #define in(x) cout << x << endl
  16. #define all(x) (x).begin(),(x).end()
  17. #define getbit(x, i) (((x) >> (i)) & 1)
  18. #define cntbit(x) __builtin_popcount(x)
  19. #define FOR(i,l,r) for (int i = l; i <= r; i++)
  20. #define FORD(i,l,r) for (int i = l; i >= r; i--)
  21. #define Debug(a,n) for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl
  22.  
  23. using namespace std;
  24.  
  25. typedef long long ll;
  26. typedef vector<int> vi;
  27. typedef pair<int,int> vii;
  28. typedef unsigned long long ull;
  29. typedef vector<vector<int>> vvi;
  30. int fastMax(int x, int y) { return (((y-x)>>(32-1))&(x^y))^y; }
  31.  
  32. const int N = 101;
  33. const int oo = INT_MAX;
  34. const int mod = 1e9 + 7;
  35. const int d4x[4] = {-1, 0, 1, 0} , d4y[4] = {0, 1, 0, -1};
  36. const int d8x[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, d8y[8] = {0, 1, 1, 1, 0, -1, -1, -1};
  37.  
  38. int dp[N][N][N][N][3], W, B, R, k, m, n;
  39.  
  40. inline void Add(int &u, int v) {
  41. u += v;
  42. if (u >= mod) u -= mod;
  43. }
  44.  
  45. inline void Read_Input() {
  46. cin >> W >> B >> R >> k >> m;
  47. n = W + B + R;
  48. }
  49.  
  50. inline void Solve() {
  51. dp[0][0][0][0][0] = 1;
  52. FOR(w, 0, W)
  53. FOR(b, 0, B)
  54. FOR(r, 0, R) {
  55. FOR(num, 0, m)
  56. FOR(lst, 0, 2)
  57. if (dp[w][b][r][num][lst]) {
  58. int val = dp[w][b][r][num][lst];
  59.  
  60. // cout << w << " " << b << " " << r << " " << num << " " << lst << " " << val << endl;
  61. /// 0 dat trang
  62. if (lst != 0 || w == 0)
  63. for (int numW = 1; numW + w <= W && numW < k; numW++)
  64. Add(dp[w + numW][b][r][num][0], val);
  65.  
  66. /// 1 dat Xanh
  67. if (lst != 1) {
  68. for (int numB = 1; numB + b <= B; numB++)
  69. if (lst == 2)
  70. Add(dp[w][b + numB][r][num + 1][1], val);
  71. else if (lst == 0)
  72. Add(dp[w][b + numB][r][num][1], val);
  73. }
  74.  
  75. /// 1 dat Do
  76. if (lst != 2) {
  77. for (int numR = 1; numR + r <= R; numR++)
  78. if (lst == 1)
  79. Add(dp[w][b][r + numR][num + 1][2], val);
  80. else if (lst == 0)
  81. Add(dp[w][b][r + numR][num][2], val);
  82. }
  83. }
  84. }
  85. int Ans = 0;
  86.  
  87. FOR(i, 0, 2)
  88. Add(Ans, dp[W][B][R][m][i]);
  89.  
  90. cout << Ans;
  91. }
  92.  
  93. Ti20_ntson {
  94. freopen(TASK".INP","r",stdin);
  95. freopen(TASK".OUT","w",stdout);
  96. ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  97. int T = 1;
  98. // cin >> T;
  99. while (T -- ) {
  100. Read_Input();
  101. Solve();
  102. }
  103. }
  104.  
  105.  
  106.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Standard output is empty