hdu 4248 A Famous Stone Collector
首先发现一个很头痛的问题,下面是2个求排列组合的代码
memset(C,,sizeof(C));
for(int i=;i<;i++)
{
C[i][]=;
for(int j=;j<=;j++)
C[i][j]=(C[i-][j]+C[i-][j-])%MOD;
}
C[][]=;
for(int i=;i<;i++)
for(int j=;j<=;j++)
if(j==) C[i][j]=C[i-][j];
else C[i][j]=(C[i-][j]+C[i-][j-])%MOD;
其中第一个是刘汝佳上面的代码,不知为什么在杭电OJ上就是WA,第二个就能AC,就路过的大神指点
题目大意
给你一些不同颜色的石头,问选出一些石头排成一排总共有多少种不同排法,不同数量的石头视为不同情况,每个位置上的石头颜色都相同视为相同情况。
分析
dp+排列组合
dp[i][j] 表示前i堆石子构成长度为j的串的方案数;
状态转移方程是:k为i堆使用的数量
dp[i][j] = (dp[i][j] + dp[i-1][j-k] * C[j][k]%MOD)%MOD;
可以这样想
dp[ i ][ j ] = dp[ i-1 ][ j ]; //未放入第i种颜色的石头
dp[ i ][ j ] += dp[ i-1 ][ j - k ] * C[ j ][ k ]; //放入k个第i种颜色的石
#include<cstdio>
#include<cstring>
#include<iostream>
#define MOD 1000000007
using namespace std;
typedef long long LL;
LL C[][];
void get_c()
{
memset(C,,sizeof(C));
for(int i=;i<;i++)
{
C[i][]=;
for(int j=;j<=;j++)
C[i][j]=(C[i-][j]+C[i-][j-])%MOD;
}//这一步是错的,不知为啥 C[][]=;
for(int i=;i<;i++)
for(int j=;j<=;j++)
if(j==) C[i][j]=C[i-][j];
else C[i][j]=(C[i-][j]+C[i-][j-])%MOD;
}
LL dp[][];
int main()
{
int cas=,sum,n,num;
LL ans;
get_c();
while(scanf("%d",&n)!=EOF)
{
memset(dp,,sizeof(dp));
dp[][]=;
sum=;
for(int i=;i<=n;i++)
{
scanf("%d",&num);
sum+=num;
for(int k=;k<=num;k++)
{
for(int j=k;j<=sum;j++)
dp[i][j]=(dp[i][j]+(dp[i-][j-k]*C[j][k])%MOD)%MOD;
}
}
ans=;
for(int i=;i<=sum;i++)
ans=(ans+dp[n][i])%MOD;
printf("Case %d: %I64d\n",++cas,ans);
}
return ;
}
hdu 4248 A Famous Stone Collector的更多相关文章
- HDU 4248 A Famous Stone Collector 组合数学dp ****
A Famous Stone Collector Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- [ACM] hdu 4248 A Famous Stone Collector (DP+组合)
A Famous Stone Collector Problem Description Mr. B loves to play with colorful stones. There are n c ...
- HDOJ 4248 A Famous Stone Collector DP
DP: dp[i][j]前i堆放j序列长度有多少行法, dp[i][j]=dp[i-1][j] (不用第i堆), dp[i][j]+=dp[i-1][j-k]*C[j][k] (用第i堆的k个石头) ...
- hdu 5996 dingyeye loves stone(博弈)
题目链接:hdu 5996 dingyeye loves stone 题意: 给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你 ...
- hdu 4255 A Famous Grid
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...
- HDU 4256 The Famous Clock
The Famous Clock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 1115:Lifting the Stone(计算几何,求多边形重心。 过年好!)
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 4253 Two Famous Companies
Two Famous Companies Time Limit: 15000ms Memory Limit: 32768KB This problem will be judged on HDU. O ...
- HDU 4251 The Famous ICPC Team Again 主席树
The Famous ICPC Team Again Problem Description When Mr. B, Mr. G and Mr. M were preparing for the ...
随机推荐
- 使用SMSManager短信管理器发送短信
import android.os.Bundle;import android.app.Activity;import android.app.PendingIntent;import android ...
- Apache Thrift - 可伸缩的跨语言服务开发框架
To put it simply, Apache Thrift is a binary communication protocol 原文地址:http://www.ibm.com/developer ...
- c# 调用 ShellExecute
using System.Runtime.InteropServices; namespace ConsoleTest{ class Program { public enu ...
- Jmeter java.lang.OutOfMemoryError: GC overhead limit exceeded
使用这个jmeter工具测试时,遇到这么个gc错误,网上找到了解决方案.原因是jmeter默认分配内存的参数很小,好像是256M吧.故而解决方法,就是增加内存: set HEAP=-Xms4g -Xm ...
- 快排找第k大模板
int get_kth(int l,int r) { if (l==r) return a[r]; ]; while (i<j) { while (a[i]<mid) i++; while ...
- 存储过程Oracle(一)
一.简介 存储过程:就是在数据库中创建的一段程序,供别人调用 .其实我感觉跟定义一个方法相似 二.无参存储过程 如下,经典的输出"Hello World"来入门存储过程 创建一个存 ...
- nginx日志切割
脚本完成后将其存入 Nginx 安装目录的 sbin 中,取名为 cut-log.sh,之后使用 crontab -e 新增一个定时任务,在其中增加执行这个脚本: #!/bin/bash ## 零点执 ...
- c# 配置文件之configSections配置
对于小型项目来说,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易写错,这时,我们有几种解决方案 ...
- Validform自定义提示效果-使用自定义弹出框
$(function(){ $.Tipmsg.r=null; $("#add").Validform({ tiptype:function(msg){ layer.msg(msg) ...
- 关于HashMap中的负载因子
这两天在看HashMap的时候,被负载因子float loadFactor搞得很晕,经过一天的研究,最后理出了自己的一点个人见解. 在HashMap的底层存在着一个名字为table的Entry数组,在 ...