题意:

有n种石头,每种石头有a[i]个,然后让你去组合,问有多少种组合;

思路:

这种题,排列组合知识一上,非常麻烦,已经搞了好几题,看似就是排列组合的姿势,然而最终都是一种递推,也就是DP,而且比较明显的是,基本上这种数的数量级就在100/1000这样。DP来还是很有道理的;

本题:

dp[i][j] 表示前i堆石子构成长度为j的串的方案数;

k代表第 i 堆对于j的使用量,num是当前构成的长度;

然后状态转移就是:dp[i,j]+=dp[i-1,j-k]*C[ k ,num ];

预处理组合数,利用组合的性质:C(n+1,i)=C(n,i)+C(n,i-1);

最后把所有长度的可能性的种类加起来。

#include<stdio.h>
#include<queue>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
//dp[i][j] 表示前i堆石子构成长度为j的串的方案数; const int N=1e4+10;
const LL mod=1e9+7;
//int num[N];
int num;
LL dp[110][N];
LL C[N][110]; void init()
{
C[0][0]=1;
for(int i=1;i<N;i++)
for(int j=0;j<=100;j++)
{
if(!j)
C[i][j]=C[i-1][j];
else
C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
} int main()
{
init();
int cas=1;
int n;
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
dp[0][0]=1; int sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
sum+=num;
for(int k=0;k<=num;k++)
for(int j=k;j<=sum;j++)
dp[i][j]=(dp[i][j]+(dp[i-1][j-k]*C[j][k]%mod))%mod;
}
LL ans=0;
for(int i=1;i<=sum;i++)
ans=(ans+dp[n][i])%mod;
printf("Case %d: ",cas++);
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. TaskCompletionSource&lt;TResult&gt;
  2. OpenCascade Shape Representation in OpenSceneGraph
  3. Python中的编码
  4. java 调用webservice的各种方法总结
  5. Win10/UWP新特性系列—电池报告
  6. ant 构建时遇到 &ldquo;非法字符: \65279&rdquo;的解决办法
  7. informix 查看 当前锁表
  8. iOS开发——开发必备OC篇&amp;UITableView设置界面完整封装(四)
  9. 注册表-各种功能-隐藏IE、隐藏硬盘、禁用硬件
  10. Xcode5下去除Icon高光
  11. smarty 变量调节器
  12. mysql 5.7占用400M内存优化方案
  13. 【POJ】2318 TOYS ——计算几何+二分
  14. iOS特殊字符的转义字符
  15. WebDriver使用IE和chrome浏览器
  16. 1.Maven的安装及配置
  17. 应邀ITGeGe在线教育社区嵌入式基础开发讲师
  18. LogWriter: Operating system error 21(error not found) encountered
  19. vim语法
  20. 【机器学习】Octave 实现逻辑回归 Logistic Regression

热门文章

  1. CF 445A(DZY Loves Chessboard-BW填充)
  2. 【BZOJ1042】[HAOI2008]硬币购物 容斥
  3. LNK1112: module machine type &#39;x64&#39; conflicts with target machine type &#39;X86&#39;
  4. appium():PageObject&amp;PageFactory
  5. performSelector: 与 dispatch_time 异同
  6. DNS常见攻击与防范
  7. STL版 括号匹配(感觉不如之前自己用数组模拟的跑的快)
  8. mysql初始化命令及其他命令
  9. js中的命名空间
  10. 「LuoguP3796」 【模板】AC自动机(加强版)