博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
acdream 1014 Dice Dice Dice(组合)
阅读量:7221 次
发布时间:2019-06-29

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

题目链接:

题意:n个筛子,每个筛子m个面(标有数字1到m)。n个筛子前K大的筛子数字之和为p的有多少种?

思路:f[i][j][k][t]表示i分成j个数的和,j个数中最大的数为k,最小的数为t。计算的时候,枚举最大和最小的数字,再枚举在K个中最小数字出现的次数以及n-K个中最小数字出现的次数。

 

#include 
#include
#define i64 long long#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))using namespace std;i64 f[245][25][15][15],C[25][25];void init(){ int i,j,k,p,d; for(i=1;i<=12;i++) f[i][1][i][i]=1; for(j=1;j<=20;j++) for(i=0;i<=240;i++) for(k=0;k<=12;k++) { for(p=0;p<=k;p++) if(f[i][j][k][p]) for(d=1;d<=12&&i+d<=240;d++) { f[i+d][j+1][max(k,d)][min(p,d)]+=f[i][j][k][p]; } } for(i=1;i<=20;i++) { C[i][0]=C[i][i]=1; for(j=1;j
>=1; } return ans;}int main(){ init(); while(scanf("%d%d%d%d",&n,&m,&K,&p)!=-1) { if(p>K*m) { puts("0"); continue; } i64 ans=0,i,j,k,t,cnt1,cnt2; for(i=1;i<=m;i++) for(j=1;j<=i&&j*K<=p;j++) { for(cnt1=1;cnt1*j<=p&&cnt1<=K;cnt1++) for(cnt2=0;cnt2<=n-K;cnt2++) { k=0; if(cnt1*j==p) { if(i==j) k=1; else continue; } else { for(t=j+1;t<=i;t++) k+=f[p-cnt1*j][K-cnt1][i][t]; } ans+=k*C[n][K-cnt1]*C[n-(K-cnt1)][cnt1+cnt2]*POW(j-1,n-K-cnt2); } } printf("%lld\n",ans); } return 0;}

 

  

 

转载地址:http://heqym.baihongyu.com/

你可能感兴趣的文章
[LeetCode]题解(python):126-Word Ladder II
查看>>
Webform 内置对象(Response对象、Request对象,QueryString)
查看>>
ls bash: cannot create temp file for here-document: No space left on device
查看>>
方便+好用的dot图
查看>>
TensorFlow+实战Google深度学习框架学习笔记(12)------Mnist识别和卷积神经网络LeNet...
查看>>
计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接(ZT)
查看>>
Android网络游戏之神农诀项目开发--视频
查看>>
5. Longest Palindromic Substring
查看>>
【转载】MiniUtilityFramework(四):CDominatorBase
查看>>
vue2.x 过滤器,自定义按键修饰符 ,自定义指令
查看>>
【Unity】第7章 输入控制
查看>>
二叉树的性质
查看>>
git cherry-pick的使用
查看>>
python redis插件安装
查看>>
docker 开启远程
查看>>
CRM协同8.2升级到9.2SP2步骤
查看>>
hdu1085
查看>>
C#之获取年、月、日、时、分、秒...
查看>>
函数的不定长参数
查看>>
转载:一碗牛肉面的思考
查看>>