题目描述

  小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号。为了在门口展出更多种花,规定第 i 种花不能超过 ai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。

输入

  第一行包含两个正整数 n 和 m,中间用一个空格隔开。
第二行有 n 个整数,每两个整数之间用一个空格隔开,依次表示 a1、a2、……an。

输出

  输出只有一行,一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 1000007 取模的结果。

样例输入

2 4 3 2

样例输出

2

提示

【输入输出样例说明】

有 2 种摆花的方案,分别是(1,1,1,2), (1,1,2,2)。括号里的 1 和 2 表示两种花,

比如第一个方案是前三个位置摆第一种花,第四个位置摆第二种花。

【数据范围】

对于 20%数据,有 0<n≤8,0<m≤8,0≤ai≤8;

对于 50%数据,有 0<n≤20,0<m≤20,0≤ai≤20;

对于 100%数据,有 0<n≤100,0<m≤100,0≤ ai≤100。

【题解】

用f[i][j]表示前i种花一共种了m盆的方案数,则f[i][j]=sum{f[i-1][j-k]}   (0<=k<=a[i])

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#define mod 1000007
using namespace std;
int n,m,a[],f[][];
inline int read()
{
int x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
int main()
{
n=read(); m=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=a[];i++) f[][i]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=a[i];k++)
if(j>=k) f[i][j]=(f[i][j]+f[i-][j-k])%mod;
printf("%d\n",f[n][m]);
return ;
}

NOIP2012摆花的更多相关文章

  1. [NOIP2012] 摆花

    1270. [NOIP2012] 摆花 http://cogs.pro/cogs/problem/problem.php?pid=1270 ★   输入文件:flower.in   输出文件:flow ...

  2. [noip科普]关于LIS和一类可以用树状数组优化的DP

    预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法,我们可以将其不严谨地先理解为递推.例如斐波那契数列的递推求法可以不严谨地认为是DP.当然DP的状态也可以 ...

  3. 【转】关于LIS和一类可以用树状数组优化的DP 预备知识

    原文链接 http://www.cnblogs.com/liu-runda/p/6193690.html 预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法 ...

  4. NOIP2012 普及组 T3 摆花——S.B.S.

    题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

  5. [Noip2012普及组]摆花

    Description 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆.通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号.为了在门口展出更多种花,规定 ...

  6. 洛谷P1077 [NOIP2012普及组]摆花 [2017年四月计划 动态规划14]

    P1077 摆花 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能 ...

  7. Vijos_1792_摆花_(动态规划,多重集组合数)

    描述 https://vijos.org/p/1792 共n种花,第i种花有a[i]个,要摆m个,同一种花连续且花按照序号从小到大排,问共有多少种摆花方案.   描述 小明的花店新开张,为了吸引顾客, ...

  8. NOIP2012 普及组真题 4.13校模拟

    考试状态: 我今天抽签看了洛谷的… 这我能怂???凶中带吉,我怕考试??我!不!怕! 看着整个机房的男同学们,我明白我是不会触发我的忌了.很好,开刷. A. [NOIP2012普及组真题] 质因数分解 ...

  9. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

随机推荐

  1. will-change 提高页面滚动、动画等渲染性能

    一.先来看一个例子 视差滚动现在不是挺流行的嘛,然后Chris Ruppel当其使用background-attachment: fixed实现背景图片不随滚动条滚动而滚动效果的时候,发现,页面的绘制 ...

  2. Flash Builder 4.6配置ASDoc

    ASDoc是Adobe自带的文档生成工具.可以生成类似JavaDoc格式的文档. 关于ASDoc详情参见官方文档: http://help.adobe.com/zh_CN/flex/using/WSd ...

  3. 【解题报告】[动态规划] - PID90 / 未出现的子串

    原题地址:http://www.rqnoj.cn/problem/90 解题思路:题目看起来不太像动态规划... 我用一个数组f[i][j]来表示在数组第i个元素的后面第一次出现j的位置,为-1则是没 ...

  4. HDU - 6430:TeaTree (线段树合并)

    Recently, TeaTree acquire new knoledge gcd (Greatest Common Divisor), now she want to test you. As w ...

  5. 《DSP using MATLAB》示例Example7.20

    代码: M = 51; alpha = (M-1)/2; Dw = 2*pi/M; l = 0:M-1; wl = Dw*l; T1 = j*0.39; k1 = 0:floor((M-1)/2); ...

  6. sqlalchemy在pythonweb中开发的使用(基于tornado的基础上)

    一.关于SQLAlchemy的安装pip install SQLAlchemy安装如果上面的方式安装不成功的情况可以使用下面的方法 百度下载window或者linux下面对应的sqlalchemy的版 ...

  7. 实现一个自定义<table>标签

    需求是有两个自定义的标签<table>和<column> <table>有个items属性,负责导入数据 package hello; import java.ut ...

  8. 一个kafka异常

    卡夫卡经常超时,而且超时时间固定为三分钟,因为时间长度固定,所以逆推一下,发现现有的配置里面有个session的timeout是三分钟,但是其实后来验证发现真是的原因是connect timeout, ...

  9. mysql数据库备份与还原(转)

    MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Linux下MySQL的备份与还原 1.1 备份 [root@localhost ~]# cd /var/ ...

  10. poj 3046 Ant Counting——多重集合的背包

    题目:http://poj.org/problem?id=3046 多重集合的背包问题. 1.式子:考虑dp[ i ][ j ]能从dp[ i-1 ][ k ](max(0 , j - c[ i ] ...