Codeforces 431C —— k-Tree(DP)
2014-05-22 09:33
357 查看
题目:http://codeforces.com/problemset/problem/431/C
题意:给出K-Tree定义,每个结点都有恰好K个孩子,这棵树无限增长。每个节点到它K个孩子的K条边的权重刚好是1,2,3...,K(看图应该也看得明白)
现在问有多少条路径,使得从根节点出发到达某个结点,经过的边权重之和恰好为n,并且经过的边至少有一条权重不小于d。
先不考虑d。其实可以发现每个节点选择一条边到达一个子节点之后,假设经过的权值为j,那么问题就是原问题的n变成n-j而已。
记dp
为答案,那么dp
= dp[n-1]+dp[n-2]+...+dp[n-k]。n和k只有100,直接计算问题不大。
再来考虑d,其实可以转换问题,求出所有边权重小于d的,再用总方案数减掉。而所有权重小于d的话,问题等价于这棵树是K值等于d-1的K-Tree,然后还是求n的方案数。
然后小心取模就没问题了。
这里说下,我的实现中dp[0][i]代表K值为k,权值和为i的方案数;dp[1][i]代表K值为d-1,权值和为i的方案数;
题意:给出K-Tree定义,每个结点都有恰好K个孩子,这棵树无限增长。每个节点到它K个孩子的K条边的权重刚好是1,2,3...,K(看图应该也看得明白)
现在问有多少条路径,使得从根节点出发到达某个结点,经过的边权重之和恰好为n,并且经过的边至少有一条权重不小于d。
先不考虑d。其实可以发现每个节点选择一条边到达一个子节点之后,假设经过的权值为j,那么问题就是原问题的n变成n-j而已。
记dp
为答案,那么dp
= dp[n-1]+dp[n-2]+...+dp[n-k]。n和k只有100,直接计算问题不大。
再来考虑d,其实可以转换问题,求出所有边权重小于d的,再用总方案数减掉。而所有权重小于d的话,问题等价于这棵树是K值等于d-1的K-Tree,然后还是求n的方案数。
然后小心取模就没问题了。
这里说下,我的实现中dp[0][i]代表K值为k,权值和为i的方案数;dp[1][i]代表K值为d-1,权值和为i的方案数;
#include<cstdio> #include<cstring> #define LL long long #define mod 1000000007 LL dp[2][101]; int n, k, d, i, j; int main(){ while(~scanf("%d %d %d", &n, &k, &d)){ memset(dp,0,sizeof(dp)); dp[0][0]=dp[1][0]=1; d--; for(i=1; i<=n; i++){ for(j=1; j<=k; j++){ if(i-j<0) break; dp[0][i] = (dp[0][i]+dp[0][i-j])%mod; } for(j=1; j<=d; j++){ if(i-j<0) break; dp[1][i] = (dp[1][i]+dp[1][i-j])%mod; } } printf("%I64d\n", ((dp[0] -dp[1] )%mod + mod)%mod); } return 0; }
相关文章推荐
- Codeforces 431C —— k-Tree(DP)
- codeforces-431C-k-Tree【dp】
- Codeforces 461B - Appleman and Tree 树状DP
- Round 3 F - k-Tree CodeForces - 431C - K叉树 树形DP
- [BZOJ4424]CodeForces 19# E Fairy(树形dp / Link-Cut-tree)
- Codeforces 161 D. Distance in Tree (树dp)
- Codeforces 280C Game on Tree 概率dp 树上随机删子树 求删完次数的期望
- CodeForces 431C k-Tree(dp)
- CodeForces 618 D Hamiltonian Spanning Tree(树形DP)
- Codeforces 682C Alyona and the Tree DP
- CodeForces 771C Bear and Tree Jumps 树形DP
- 矩阵快速幂DP Darth Vader and Tree : CodeForces - 514E
- codeforces 462 d Appleman and Tree(树形dp)
- Codeforces_431C_k-Tree(背包)
- Appleman and Tree - CodeForces 461 B 树形dp
- codeforces 161D D. Distance in Tree(树形dp)
- 【 Codeforces 514E 】Darth Vader and Tree - DP 矩乘转移
- 【codeforces 734E】Anton and Tree【缩点+DP】
- Codeforces 682C Alyona and the Tree(树形DP)
- Codeforces 161 D Distance in Tree 树形DP