Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e3 + 10;
- const int K = 1e3 + 10;
- const int Mod = 1e9 + 7;
- int dp[3][N][K][8];
- bool vs[3][N][K][8];
- vector <int> g[3];
- int n, k[3]; /// 7
- int f(int u, int day, int cur, int abc){
- if(day == n) return abc == 7;
- if(vs[u][day][cur][abc]) return dp[u][day][cur][abc];
- vs[u][day][cur][abc] = true;
- if(cur + 1 <= k[u])
- dp[u][day][cur][abc] = f(u, day + 1, cur + 1, abc) % Mod;
- for(auto v: g[u])
- dp[u][day][cur][abc] = ( dp[u][day][cur][abc] + f(v, day + 1, 1, abc | (1 << v)) ) % Mod;
- return dp[u][day][cur][abc];
- }
- int main(){
- scanf("%d", &n);
- scanf("%d %d %d", &k[0], &k[1], &k[2]);
- g[0].push_back(1);
- g[0].push_back(2);
- g[1].push_back(2);
- g[2].push_back(0);
- cout << f(0, 1, 1, 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement