COJ 1351 Tree Counting 动态规划
2024-09-30 20:32:04
题目大意是:
给定一个n,k,表示树上共有n个节点,每个节点最多有k个叶子,问一共多少种摆法,答案对1000000007取模
这里定义一个dp[i]表示 i 个节点对应有多少种方法
f[i][j] 表示一个除去顶点的树中,这个顶点延伸出 j 个子树 , 这j个子树中共有i 个点
那么只要在f[i][j]上添加一个顶点就得到了 dp[i]
所以dp[i+1] = f[i][0] + f[i][1] ......+f[i][k]
f[i][j] = ∑(f[i-k][j-1]*dp[k]) k<=i;
#include <cstdio>
#include <cstring>
#include <iostream>
#define maxn 205
const int mod = ;
using namespace std; long long dp[maxn],f[maxn][]; int main()
{
// freopen("a.in" , "r" , stdin);
int T,n,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d" , &n , &k);
memset(f , , sizeof(f));
memset(dp , , sizeof(dp));
f[][] = ;
dp[] = ;
for(int i= ; i<n ; i++){
for(int j=k ; j>= ; j--){
for(int t= ; t<=i ; t++){
f[i][j] += (f[i-t][j-]*dp[t])%mod;
f[i][j]%=mod;
}
// cout<<"i: "<<i<<" j: "<<j<<" "<<f[i][j]<<endl;;
} for(int j= ; j<=k ; j++){
dp[i+] += f[i][j];
dp[i+]%=mod;
}
// cout<<"i: "<<i<<" "<<dp[i]<<endl;
}
printf("%lld\n" , dp[n]);
}
return ;
}
最新文章
- [原]在GeoServer中为OpenStreetMap数据设置OSM样式
- day3
- 让Team Foundation Server/TFS自动记住用户名密码解决方案
- 关于oracle修复控制文件与数据文件不一致的问题----
- 【C语言】05-printf和scanf函数
- Java设计模式之适配器设计模式
- android之SeekBar控件用法
- MVC 局部加载页面的实例
- 自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]
- HTML5入门3---视频播放器
- Hadoop MapReduce概念学习系列之mr程序详谈(二十三)
- vim file save as
- Android中ListView下拉刷新的实现
- 2017-2018-1 20155205 实现mypwd
- python 小练习 5
- 升级pip10.0.0后出现ModuleNotFoundError: No module named 'pip'的问题
- 关于dc.add(Restrictions.like(";XXX";, ";%";+XXX+";%";))查询不到结果,但数据库中存在
- requests库的文档--快速上手
- Linux crontab下关于使用date命令和sudo命令的坑
- CDN的基本原理和基础架构
热门文章
- 【weiphp】安装中报错
- NetCore Netty 框架 BT.Netty.RPC 系列随讲 —(前序) REST API 与 RPC 经典网络基础服务架构
- DP Codeforces Round #FF (Div. 1) A. DZY Loves Sequences
- RabbitMQ二:AMQP协议
- 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
- poj1787 Charlie&#39;s Change
- leetcode221 Maximal Square
- Matlab2014的下载和安装激活过程
- 多路开关模式的switch语句
- re.S解析