Famous Stone Collector HDU
来源:互联网 发布:软件手术刀怎么用 编辑:程序博客网 时间:2024/06/05 17:56
题意:给你n种物品的数量,相同物品不能区分,不同物品可以区分,问你排列的总数量。
之前做过dp的计数问题,是计算组合的总数量。排列的总数量就是状态方程改了一下。
dp[i][j]=(dp[i][j]+dp[i-1][j-k]*c[j][k]%inf)%inf;//c[i][j]:在j个位置上取k个的方案数。
因为数组大小,WA了几发。。为什么不出RE。。
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>using namespace std;const int maxn = 105;int a[maxn];long long dp[maxn][maxn*maxn];long long c[maxn*maxn][maxn];#define inf 1000000007void init(){ c[1][0]=c[1][1]=c[0][0]=1; for(int i=2;i<=10010;i++) { c[i][0]=c[i][i]=1; for(int j=1;j<=100;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%inf; } return ;}void Read(int &x){ x=0;char c=getchar(); bool flag=0; while(c<'0'||'9'<c){ if(c=='-') flag=1; c=getchar(); } while('0'<=c&&c<='9') { x=x*10+c-'0';c=getchar(); } if(flag) x=-x;}int main(){ int n; init(); int case1=0; while(~scanf("%d",&n)) { int sum=0; for(int i=0;i<n;i++){ Read(a[i]); sum+=a[i]; } memset(dp,0,sizeof(dp)); for(int i=0;i<=a[0];i++) dp[0][i]=1; for(int i=1;i<n;i++) { for(int j=0;j<=sum;j++) { int lim=min(j,a[i]); for(int k=0;k<=lim;k++) { dp[i][j]=(dp[i][j]+dp[i-1][j-k]*c[j][k]%inf)%inf; } } } long long ans=0; printf("Case %d: ",++case1); for(int i=1;i<=sum;i++) ans=(ans+dp[n-1][i])%inf; printf("%I64d\n",ans); } return 0;}
阅读全文
0 0
- Famous Stone Collector HDU
- hdu 4248 A Famous Stone Collector
- hdu 4248 A Famous Stone Collector
- HDU 4248 A Famous Stone Collector (dp)
- hdu 4248 A Famous Stone Collector(组合数学&DP)
- hdu 4248 A Famous Stone Collector dp+组合数学
- [ACM] hdu 4248 A Famous Stone Collector (DP+组合)
- HDU 4248 A Famous Stone Collector(组合计数)
- HDU 4248 A Famous Stone Collector(DP + 组合数)
- 【HDU 4248】组合数学 A Famous Stone Collector
- 【原创】【组合数学】HDU 4248 A Famous Stone Collector
- hdu4248 A Famous Stone Collector
- HDU_4248_A Famous Stone Collector(组合数学+DP)
- HDOJ 4248 A Famous Stone Collector DP
- hdu 4248 A Famous Stone Collector【DP】【Fudan Local Programming Contest 2012 D】
- HDU 4248 A Famous Stone Collector(类多重背包+组合数)
- HDOJ 题目4284 A Famous Stone Collector(组合数学)
- #HDU4248#A Famous Stone Collector(组合数)
- C++搜索之鸣人和佐助
- PB开发过程中如何search查中文字符内容
- AngularJS的一些坑以及注意点
- 如何直接引用微信的图片链接详解
- Java异常处理
- Famous Stone Collector HDU
- Python学习(一)
- 亲身体验行为驱动开发
- View实现弹性滑动
- 关于body添加position:fixed会返回到网页顶部的问题
- jsessionid用途
- c++头文件
- Hello Python!!!
- 带你轻松了解Android 设计模式——Builder模式