摆花(2012Noip普及组第3题)
摆花
(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)
以
#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题)相关推荐
- NOIP普及组历届真题(1997~2018)
供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...
- NOIP2005普及组第4题 循环
NOIP2005普及组第4题 循环 时间限制: 1 Sec 内存限制: 128 MB 提交: 27 解决: 6 [提交][状态][讨论版][命题人:外部导入] 题目描述 乐乐是一个聪明而又勤奋好学 ...
- NOIP普及组第1题(1995-2018)
NOIP1995普及组复赛第1题 https://blog.csdn.net/secret_zz/article/details/76862335 https://blog.csdn.net/WDAJ ...
- NOIP2005普及组第3题 采药 (背包问题)
NOIP2005普及组第3题 采药 时间限制: 1 Sec 内存限制: 128 MB 提交: 50 解决: 23 [提交][状态][讨论版][命题人:外部导入] 题目描述 辰辰是个天资聪颖的孩子, ...
- noip2004普及组第2题 花生采摘
题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!――熊字". 鲁宾逊先生和多多都很 ...
- NOIP2003普及组第1题 乒乓球(Table.cpp)-- python3实现
[NOIP2003 普及组] 乒乓球 - 洛谷 """NOIP2003普及组第1题 乒乓球(Table.cpp)--python3实现 https://www.luogu ...
- NOIP2015普及组第1题 45 金币 方法三(python3实现)
OpenJudge - 45:金币 信息学奥赛一本通(C++版)在线评测系统 [NOIP2015 普及组] 金币 - 洛谷 n=int( input() )x=1 #x为每天收到的金币数sum=0t= ...
- NOIP2016 复赛普及组第 1 题 买铅笔 方法一
/* NOIP2016 复赛普及组第 1 题 买铅笔 方法一 P1909 买铅笔 https://www.luogu.org/problem/P1909 */ #include<cstdio& ...
- luogu1042 乒乓球(NOIP2003普及组第1题)
luogu1042 乒乓球(NOIP2003普及组第1题) 时空限制 1000ms/128MB 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及 ...
最新文章
- R.Java文件报错
- PAT1036:Boys vs Girls
- 如果要存ip地址,用什么数据类型比较好?
- NSIS打包软件使用
- 我的工作日报 - 2020-9-11 星期五
- python视图函数是什么_python之视图函数(views.py)
- Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵
- C语言 sprintf 函数 - C语言零基础入门教程
- Linux APT VIM 的一些指令
- U盘PE安装windows7 方法
- php 调用vs2013 dll文件,vs2015 肿么添加dll文件
- C typedef用途小结
- 微信模拟地理位置_微信电脑版伪装地理位置的方法
- Excel通过图片名插入图片
- elemen点击时,修改走马灯的播放索引
- #研发解决方案#数据开放实验室:再战即席查询和数据开放
- Android来电拦截及来电转移
- 钉钉电脑端屏蔽文件上传下载功能的方法
- Suspicious URL pattern: [/druid/**] ,进入不了druid的后台
- Cadence Virtuoso IC617从原理图建立器件和生成版图
热门文章
- python爬虫re_python网络爬虫之三re正则表达式模块
- 最小的linux内核代码,带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统...
- c++读取utf8文件_在MySQL中你是否使用过utf8,有没有遇到这样的bug那就要注意了...
- mysql文件扩展名查询_如何通过MySQL查询获取文件的文件扩展名?
- java dubbo swagger_Dubbo 的 Swagger 服务文档 swagger-dubbo
- 谷歌浏览器linux 64怎么安装插件,Ubuntu 16.04下安装64位谷歌Chrome浏览器
- mysql maratadb_Mysql/Mairadb主从复制
- HTML出现jQuery.Deferred exception: undefined is not a function,已解决
- 20200503:力扣187周周赛上
- 一张纸厚度大约是什么_折叠103次,纸厚度就能超过宇宙直径?科学家解释让人如坠冰窖!...