题目描述

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

试编程计算,一共有多少种不同的摆花方案。

输入输出格式

输入格式:

第一行包含两个正整数n和m,中间用一个空格隔开。

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

输出格式:

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

输入输出样例

输入样例#1:

2 4
3 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。

NOIP 2012 普及组 第三题

--------------------

不能二进制拆分

f[i][j]前i种花j盆,枚举第i种选了几个

初始化f[1..n][0]=1,f[1][0..a[1]]=1

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=,MOD=;
int n,m,a[N];
int f[N][N];
int main(int argc, const char * argv[]) {
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]),f[i][]=;
for(int i=;i<=a[];i++) f[][i]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
for(int k=j-a[i];k<=j;k++)
if(k>=)f[i][j]=(f[i][j]+f[i-][k])%MOD;
}
printf("%d",f[n][m]);
return ;
}

最新文章

  1. linux网络配置
  2. Ashx的处理实例(逻辑处理/js调用)
  3. 关于在gridview中有dorpdownlist的情况下使用自带编辑模板的方法
  4. 【iCore3 双核心板】例程十三:SDIO实验——读取SD卡信息
  5. Sonatype Nexus高级配置
  6. python语法笔记(五)
  7. [原]poj-3009-Curling 2.0-dfs
  8. November 4th Week 45th Friday 2016
  9. php + apache + mysql
  10. 基本的编程原则SOLID
  11. iOS蓝牙调用的一般流程
  12. JAVA解析HTML,获取待定元素属性
  13. ArcGIS Pro 简明教程(2)基础操作和简单制图
  14. select应用于read函数 超时非阻塞方式
  15. Windows Server 2008 R2 Enterprise x64 部署 nginx、tomcat、mysql
  16. Content Provider的启动过程
  17. js——作用域和闭包
  18. 分布式环境中,模块数据交互协议分析 (百度brpc)
  19. OpenCV Python : No drawMatchesknn function
  20. [ ZooKeeper]ZooKeeper 的功能和原理

热门文章

  1. 小白的vue学习路程
  2. 如何向github上传文件
  3. 从零开始,做一个NodeJS博客(一):Heroku上的最简NodeJS服务器
  4. SharePoint2010升级到SharePoint2013操作手册
  5. 1分钟实现Autodesk Vault登录对话框
  6. 操作系统开发系列—12.f.在内核中添加中断处理 ●
  7. Android 沉浸式状态栏 实现方式二 ( 更简单 )
  8. JS获取浏览器名和版本信息
  9. Routine
  10. Palo(OLAP database)&ndash;MOLAP