C. k-Tree

it2023-08-06  69

传送门

题意: n,k,d; k-tree,每个节点有k个孩子,1,2,3....k; 求存在weight = n && 至少有一条边 >= d 方案数 dp[n][1]表示和为n,max >= d的方案数量 dp[n[0]表示和为n,max < d 的方案数量 #include <bits/stdc++.h> using namespace std; const int mod = 1e9 + 7; int n,k,d; long long dp[110][2]; int main() { ios::sync_with_stdio(0); cin >> n >> k >> d; dp[0][0] = 1; for(int i = 1; i <= n; i++){ for(int j = 1; j <= k; j++){ if(i >= j){ if(j < d){ dp[i][0] = (dp[i][0] + dp[i - j][0]) % mod; dp[i][1] = (dp[i][1] + dp[i - j][1]) % mod; }else dp[i][1] = (dp[i][1] + dp[i - j][0] + dp[i - j][1]) % mod; } } } cout << dp[n][1] << endl; return 0; }
最新回复(0)