#include<vector>usingnamespace std;
classSolution {
public:int waysToReachSum(int n) {
constint MOD =1e9+7;
vector<int> dp(n+1);
dp[0] =1;
int coins[] = {1,2,6};
for (int c : coins)
for (int i = c; i <= n; ++i)
dp[i] = (dp[i] + dp[i-c]) % MOD;
vector<int> res = dp;
for (int i =4; i <= n; ++i)
res[i] = (res[i] + dp[i-4]) % MOD;
for (int i =8; i <= n; ++i)
res[i] = (res[i] + dp[i-8]) % MOD;
return res[n];
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
classSolution {
publicintwaysToReachSum(int n) {
int MOD = 1000000007;
int[] dp =newint[n+1];
dp[0]= 1;
int[] coins = {1,2,6};
for (int c : coins)
for (int i = c; i <= n; ++i)
dp[i]= (dp[i]+ dp[i-c]) % MOD;
int[] res = dp.clone();
for (int i = 4; i <= n; ++i)
res[i]= (res[i]+ dp[i-4]) % MOD;
for (int i = 8; i <= n; ++i)
res[i]= (res[i]+ dp[i-8]) % MOD;
return res[n];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
classSolution:
defwaysToReachSum(self, n: int) -> int:
MOD =10**9+7 dp = [0] * (n+1)
dp[0] =1for c in [1,2,6]:
for i in range(c, n+1):
dp[i] = (dp[i] + dp[i-c]) % MOD
res = dp[:]
for i in range(4, n+1):
res[i] = (res[i] + dp[i-4]) % MOD
for i in range(8, n+1):
res[i] = (res[i] + dp[i-8]) % MOD
return res[n]
impl Solution {
pubfnways_to_reach_sum(n: i32) -> i32 {
let n = n asusize;
let m =1_000_000_007;
letmut dp =vec![0; n+1];
dp[0] =1;
for&c in&[1,2,6] {
for i in c..=n {
dp[i] = (dp[i] + dp[i-c]) % m;
}
}
letmut res = dp.clone();
for i in4..=n {
res[i] = (res[i] + dp[i-4]) % m;
}
for i in8..=n {
res[i] = (res[i] + dp[i-8]) % m;
}
res[n]
}
}