摆花

(flower.cpp/c/pas)

【问题描述】

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

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

【输入】

输入文件 flower.in,共 2 行。

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

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

【输出】

输出文件名为 flower.out。

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

【输入输出样例 1】

flower.in

2 4

3 2

flower.out

2

分析:

动态规划:

题目要求花必须按从小到大的顺序摆放,并且同种类的花必须挨着放,则题目就简单多了

a[i]表示第i种花最多使用的盆数
f[i][j]表示前i种花,摆j盆的摆放方案数。对于第i种花可以使用0、1、2...a[i]盆,对应的前i-1种花摆放的盆数为j-0、j-1、j-2、...j-a[i]
即f[i][j]=f[i-1][j]+f[i-1][j-1]+f[i-1][j-2]+...+f[i-1][j-a[i]] =f[i-1][j-k](0<=k<=a[i],j>=k)
方程写出来后,最关键的就是赋初始值

初始值f[1][0]=1,f[1][1]=1,...f[1][a[1]]=1;
初始值f[i][0]=1;(1<=i<=n)

2 4
3 2
为例:
很显然f[1][1]=f[1][2]=f[1][3]=1;
f[2][1]=2,前2种花,放一盆,则有1,2两种方法。又
f[2][1]=f[1][0]+f[1][1]=f[1][0]+1可以推出f[1][0]=1;
同样的方法可以推出f[2][0]=f[3][0]=...=f[n][0]=1;
(f[2][2]=f[1][0]+f[1][1]+f[1][2]
f[2][3]=f[1][1]+f[1][2]+f[1][3]
f[2][4]=f[1][2]+f[1][3]+f[1][2])

#include<iostream>
#include<cstring>
using namespace std;
int f[200][200]={{0,0}};
int a[200];
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];memset(f,0,sizeof(f));for(int i=0;i<=a[1];i++) f[1][i]=1;for(int i=1;i<=n;i++)f[i][0]=1;for (int i=2;i<=n;i++)for(int j=1;j<=m;j++)for(int k=0;k<=a[i];k++)if (j>=k)f[i][j]=(f[i][j]+f[i-1][j-k])% 1000007;cout<<f[n][m]<<endl;return 0;
}

View Code

方法2:初始值f[0][0]=1;前0种花摆放0盆的方案数为1

//题目要求花必须按从小到大的顺序摆放,并且同种类的花必须挨着放,则题目就简单多了
//f[i][j]表示前i种花,摆j盆的摆放方案数。对于第i种花可以使用0、1、2...a[i]盆,对应的前i-1种花摆放的盆数为j-0、j-1、j-2、...j-a[i]
//即f[i][j]=f[i-1][j]+f[i-1][j-1]+f[i-1][j-2]+...+f[i-1][j-a[i]] (j>a[i])
//初始值f[0][0]=1;前0种花摆放0盆的方案数为1
//方程写出来后,最关键的就是赋初始值
#include<iostream>
#include<cstring>
using namespace std;
int f[200][200]={{0,0}};
int a[200];
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];memset(f,0,sizeof(f));f[0][0]=1;
//    for(int i=0;i<=a[1];i++) f[1][i]=1;
//    for(int i=1;i<=n;i++)f[i][0]=1;for (int i=1;i<=n;i++)for(int j=0;j<=m;j++)for(int k=0;k<=a[i];k++)if (j>=k)f[i][j]=(f[i][j]+f[i-1][j-k])% 1000007;cout<<f[n][m]<<endl;return 0;
}

View Code

       
       

转载于:https://www.cnblogs.com/ssfzmfy/p/5793220.html

摆花(2012Noip普及组第3题)相关推荐

  1. NOIP普及组历届真题(1997~2018)

    供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...

  2. NOIP2005普及组第4题 循环

    NOIP2005普及组第4题 循环 时间限制: 1 Sec  内存限制: 128 MB 提交: 27  解决: 6 [提交][状态][讨论版][命题人:外部导入] 题目描述 乐乐是一个聪明而又勤奋好学 ...

  3. NOIP普及组第1题(1995-2018)

    NOIP1995普及组复赛第1题 https://blog.csdn.net/secret_zz/article/details/76862335 https://blog.csdn.net/WDAJ ...

  4. NOIP2005普及组第3题 采药 (背包问题)

    NOIP2005普及组第3题 采药 时间限制: 1 Sec  内存限制: 128 MB 提交: 50  解决: 23 [提交][状态][讨论版][命题人:外部导入] 题目描述 辰辰是个天资聪颖的孩子, ...

  5. noip2004普及组第2题 花生采摘

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!――熊字". 鲁宾逊先生和多多都很 ...

  6. NOIP2003普及组第1题 乒乓球(Table.cpp)-- python3实现

    [NOIP2003 普及组] 乒乓球 - 洛谷 """NOIP2003普及组第1题 乒乓球(Table.cpp)--python3实现 https://www.luogu ...

  7. NOIP2015普及组第1题 45 金币 方法三(python3实现)

    OpenJudge - 45:金币 信息学奥赛一本通(C++版)在线评测系统 [NOIP2015 普及组] 金币 - 洛谷 n=int( input() )x=1 #x为每天收到的金币数sum=0t= ...

  8. NOIP2016 复赛普及组第 1 题 买铅笔 方法一

    /* NOIP2016 复赛普及组第 1 题 买铅笔 方法一  P1909 买铅笔 https://www.luogu.org/problem/P1909 */ #include<cstdio& ...

  9. luogu1042 乒乓球(NOIP2003普及组第1题)

    luogu1042  乒乓球(NOIP2003普及组第1题) 时空限制    1000ms/128MB 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及 ...

最新文章

  1. R.Java文件报错
  2. PAT1036:Boys vs Girls
  3. 如果要存ip地址,用什么数据类型比较好?
  4. NSIS打包软件使用
  5. 我的工作日报 - 2020-9-11 星期五
  6. python视图函数是什么_python之视图函数(views.py)
  7. Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵
  8. C语言 sprintf 函数 - C语言零基础入门教程
  9. Linux APT VIM 的一些指令
  10. U盘PE安装windows7 方法
  11. php 调用vs2013 dll文件,vs2015 肿么添加dll文件
  12. C typedef用途小结
  13. 微信模拟地理位置_微信电脑版伪装地理位置的方法
  14. Excel通过图片名插入图片
  15. elemen点击时,修改走马灯的播放索引
  16. #研发解决方案#数据开放实验室:再战即席查询和数据开放
  17. Android来电拦截及来电转移
  18. 钉钉电脑端屏蔽文件上传下载功能的方法
  19. Suspicious URL pattern: [/druid/**] ,进入不了druid的后台
  20. Cadence Virtuoso IC617从原理图建立器件和生成版图

热门文章

  1. python爬虫re_python网络爬虫之三re正则表达式模块
  2. 最小的linux内核代码,带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统...
  3. c++读取utf8文件_在MySQL中你是否使用过utf8,有没有遇到这样的bug那就要注意了...
  4. mysql文件扩展名查询_如何通过MySQL查询获取文件的文件扩展名?
  5. java dubbo swagger_Dubbo 的 Swagger 服务文档 swagger-dubbo
  6. 谷歌浏览器linux 64怎么安装插件,Ubuntu 16.04下安装64位谷歌Chrome浏览器
  7. mysql maratadb_Mysql/Mairadb主从复制
  8. HTML出现jQuery.Deferred exception: undefined is not a function,已解决
  9. 20200503:力扣187周周赛上
  10. 一张纸厚度大约是什么_折叠103次,纸厚度就能超过宇宙直径?科学家解释让人如坠冰窖!...