Round 3 F - k-Tree CodeForces - 431C - K叉树 树形DP
2017-07-17 15:15
543 查看
题目链接:
http://codeforces.com/problemset/problem/431/C
大意:
无限的完全 K 叉树,每层边权值分别为 1.2.3…K
要求至少经过一个 大于 d 的边
求和为 n 有多少种走法
思路:
树形DP,一道很好的 dp 题,方程推出来了,但是想歪了,一开始甚至想三维dp[i][j][k] 准备用上 n k d
实际上按照递推方程的写法来思考 考虑 k 的时候,就不要考虑 d 的变化
解法是把 d 和 k 叉树看成一个状态
代码:
参考博客:
http://blog.csdn.net/u014634338/article/details/45722203
http://blog.csdn.net/hongrock/article/details/26557119
http://codeforces.com/problemset/problem/431/C
大意:
无限的完全 K 叉树,每层边权值分别为 1.2.3…K
要求至少经过一个 大于 d 的边
求和为 n 有多少种走法
思路:
树形DP,一道很好的 dp 题,方程推出来了,但是想歪了,一开始甚至想三维dp[i][j][k] 准备用上 n k d
实际上按照递推方程的写法来思考 考虑 k 的时候,就不要考虑 d 的变化
解法是把 d 和 k 叉树看成一个状态
dp[i][0]:表示权值和为 i 中不包含权值>=d的边。 dp[i][j]: 表示权值和为 i 中包含权值 >=d的边。 dp[i][0]+=dp[i-j][0] (j<d)//从 1 加到 i dp[i][1]+=dp[i-j][0] (j>=d) dp[i][1]+=dp[i-j][1];
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define D(v) cout<<#v<<" "<<v<<endl #define mem(s,t) memset(s,t,sizeof(s)) const ll mod=1e9+7; const int MAXN =105; int n,k,d; ll dp[2][MAXN]; int main(){ while(~scanf("%d%d%d",&n,&k,&d)){ mem(dp,0); dp[0][0]=1;//初始化,从 0 开始设。 for(int i=0;i<=n;i++){ for(int j=1;j<=k;j++){ if(i>=j){ if(j<d){ dp[0][i]+=dp[0][i-j]; dp[0][i]%=mod; }else { dp[1][i]+=dp[0][i-j]; dp[1][i]%=mod; } dp[1][i]+=dp[1][i-j]; dp[1][i]%=mod; } } } printf("%lld\n",dp[1] ); } return 0; }
参考博客:
http://blog.csdn.net/u014634338/article/details/45722203
http://blog.csdn.net/hongrock/article/details/26557119
相关文章推荐
- Codeforces Round #397 E. Tree Folding (树形dp)
- Codeforces Round #382 (Div. 1) C. Ostap and Tree(树形DP)
- 【Codeforces Round 263 (Div 2)D】【树形DP】Appleman and Tree 树上割k个黑点为k块的方案数
- Codeforces Round #263 Div.1 B Appleman and Tree --树形DP【转】
- Codeforces Round #263 Appleman and Tree(树形DP)
- Codeforces Round #419 (Div. 2) E. Karen and Supermarket(树形DP)
- Codeforces Round #430 (Div. 2) C. Ilya And The Tree 树dp 统计
- Codeforces Round #202 (Div. 1) (树形dp, dp)
- Codeforces Round #294 (Div. 2) E. A and B and Lecture Rooms(倍增LCA+树形DP)
- Educational Codeforces Round 2 E.Lomsat gelral(树形dp)
- Codeforces Round #430 (Div. 2) - C. Ilya And The Tree (树形DFS)
- Codeforces Round #419 (Div. 2)-树形dp&依赖背包&-E. Karen and Supermarket
- Codeforces Round #263 (Div. 2) D 树形dp
- 树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
- Codeforces Round #362 (Div. 2) D 树形dp
- Codeforces Round #135 (Div. 2) - D. Choosing Capital for Treeland(dfs / 树形DP)
- Codeforces Round #343 (Div. 2) E. Famil Door and Roads (树形dp,lca)★ ★ ★
- Codeforces Beta Round #14 (Div. 2) D. Two Paths 树形dp
- codeforces round 362 div2 D Puzzles 树形dp + 期望
- Codeforces Round #363 (Div. 2) Problem D - Fix a Tree(并查集 + 构造)