博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.10-Day1T1-数字(number)
阅读量:4538 次
发布时间:2019-06-08

本文共 994 字,大约阅读时间需要 3 分钟。

数字number

 

题目大意

给定n,k,s,从1到n中取出k个数,使其之和等于s

求可行的方案数(模1e9+7)

 

题解

一眼dp,于是我去写了dfs,带着少的可怜的剪枝,快乐的tle着...

 

设 f[ i ][ j ][ q ] 表示在前 i 个数中选 j 个使其和为 q 的方案数

 

则 f [ i ][ j ][ q ]=f[ i-1 ][ j ][ q ]+f[ i-1 ][ j-1 ][ q-i ](j>=1)

 

f [ i ][ j ][ q ]=f[ i-1 ][ j ][ q ](j=0)

 

f[ i-1 ][ j ][ q ]表示不选第 i 个,f[ i-1 ][ j-1 ][ q-i ]表示选第 i 个
初始化f[0][0][0] = 1

 

最终答案为 f[ n ][ k ][ s ]
 
#include
#define ll long longusing namespace std;int n,h,s;int f[55][55][2005];const int mod = 1e9 + 7;int main(){ freopen("number.in","r",stdin); freopen("number.out","w",stdout); scanf("%d%d%d",&n,&h,&s); f[0][0][0] = 1; for(int i = 1;i <= n;i++) for(int j = 0;j <= i;j++) for(int k = 0;k <= s;k++) if(j >= 1) f[i][j][k] = (f[i -1][j][k] + f[i - 1][j - 1][k - i]) % mod; else f[i][j][k] = f[i - 1][j][k] % mod; printf("%d",f[n][h][s]); return 0;}
数字number

 

 

转载于:https://www.cnblogs.com/darlingroot/p/11331740.html

你可能感兴趣的文章
qmake常用语法二
查看>>
HBuilder更换部分
查看>>
2012软工感言
查看>>
ubuntu 16.04 C我语言开发环境搭建
查看>>
ubuntu下配置lamp环境遇到 Unable to locate package错误解决办法
查看>>
坐在马桶上看算法:快速排序【转】
查看>>
并查集详解 (转)
查看>>
JWT实战:使用axios+PHP实现登录认证
查看>>
LR发送16进制转二进制socket报文常见问题及解决方案
查看>>
模拟器 Unable to execute simctl install Error 117
查看>>
[转贴]一个将表格变成 INSERT 的SQL 语句的存储过程(sql server)
查看>>
opencv之dft及mat类型转换
查看>>
canvas 保存bitmap到本地
查看>>
SAP 动态设置 GUI STATUS 灰色不可用 或者隐藏(转)
查看>>
王晋康 - 终极爆炸 ▪ 王晋康科幻小说精选集3(2014年4月24日)
查看>>
Elasticsearch-PHP 搜索操作
查看>>
自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试(转)
查看>>
Leetcode:Unique Paths
查看>>
uC/OS-II 函数之任务相关函数
查看>>
hdu 4704 Sum (十进制快速幂)
查看>>