洛谷——P1077 摆花

news2025/1/18 8:58:59

【题目描述】

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

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

【输入】

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

第二行有 n 个整数,每两个整数之间用一个空格隔开,依次表示 1​,​a_{2},⋯,a_{n}​。

【输出】

一个整数 x,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 10^{6}+7 取模的结果。

样例输入

2 4
3 2

样例输出

2

解题思路

这个题目可能很容易就想到要用动态规划解题,思考的方向也是由浅入深。

用动态 f[i][j] 数组存储当前统计到的方案数(f[i][j] 代表一共有 i 种花时,摆放 j 盆的方案数),其中要初始化,也就是无论有多少种花(n),只要装盆数 m = 0 了,那么方案数就是 1,所以设置一个循环,从 i=0 到 i=n 时的 f[i][0] 赋为 1。

接下来就是考虑方案数了,先看状态转移方程的代码:

for(i=1;i<=n;i++)//遍历第 1种花到第 n种花 
	{
		for(j=0;j<=a[i];j++)//表示第 i种花有 a[i]朵,但是只放 j盆 
		{
			for(k=0;k<=m-j;k++)//原先有 k盆花 
			{
			    //j和 k同时为 0,代表着 n种花装 0盆,因为先前 f[i][0]已经赋值为 1了,此时不需要进行操作
				if(j==0&&k==0) 
				continue;
				f[i][k+j]=(f[i][k+j]+f[i-1][k])%mod; 
			}
		}
	}

f[i][j+k] 的含义是第 i 种花摆放 j+k 盆的方案数(第 i 种花摆放 j 盆,而前 i-1 种花摆放了 k 盆,此时一共摆放了 j+k 盆花)。

最外层循环时遍历一遍所有种类的花,内层的 j 循环是从 j=0 到 j=a[i] 遍历(代表第 i 种花放了 j 盆),最内层的 k 循环是遍历原先的盆数,因为循环是不会重复,此时的状态转移方程直接是 f[i][k+j]=f[i][j+j]+f[i-1][k]。

代码如下:

#include<stdio.h>
int a[105],f[105][105];
int main()
{
	int mod=1000007,n,m,i,j,k;
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		f[i][0]=1;
	}
	f[0][0]=1;
	for(i=1;i<=n;i++)//遍历第 1种花到第 n种花 
	{
		for(j=0;j<=a[i];j++)//表示第 i种花有 a[i]朵,但是只放 j盆 
		{
			for(k=0;k<=m-j;k++)//原先有 k盆花 
			{
			    //j和 k同时为 0,代表着 n种花装 0盆,因为先前 f[i][0]已经赋值为 1了,此时不需要进行操作
				if(j==0&&k==0) 
				continue;
				f[i][k+j]=(f[i][k+j]+f[i-1][k])%mod; 
			}
		}
	}
	printf("%d",f[n][m]);
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快捷键被占用了,这能忍吗?赶紧使用 OpenArk 找出元凶并干掉它!!!

文章目录一、 问题&#xff1a;快捷键被占用了导致影响工作效率二、OpenArk2.1 OpenArk简介功能发布官方链接2.2 下载OpenArk2.3 运行OpenArk2.4 被占用的热键元凶到底是谁&#xff1f;三、总结一、 问题&#xff1a;快捷键被占用了导致影响工作效率 你是否遇到过&#xff0c;…

用ChatGPT构建网络设备表,并根据设备关系生成网络拓扑

构造一个数据表&#xff0c;存储包括交换机、路由器、防火墙、入侵检测、上网行为管理等设备的编号、序列号、IP、MAC、访问地址、用户名、密码、管理员、物理位置、上联设备ip等信息下面是一个示例数据表&#xff1a;Device IDSerial NumberIPMACAccess URLUsernamePasswordAd…

一文教会你如何选择远程桌面(五大主流远程软件全面讲解)

写在前面 作为程序员的我们&#xff0c;随时随地写代码改代码是我们的日常。刚回到家&#xff0c;就被老板、产品经理cue是常有的事。基于这种情况&#xff0c;一般都会随身携带电脑&#xff0c;随时备战&#xff0c;不过每天背着电脑上下班非常不方便。因此资深程序员的解决方…

高通开发系列 - linux kernel更新msm-3.18升至msm-4.9

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 linux kernel更新msm-3.18升至msm-4.9第一周处理的内容:第二周处理的内容第三周处理的内容linux kernel更新msm-3.18升至msm-4.9 第…

洗地机怎么选?洗地机品牌排行榜

洗地机的出现不仅能高效的清洁地面还能节省我们做家务的时间&#xff0c;对于上班族、有宠物的家庭以及宝妈来说简直不要太方便;目前市面上的洗地机有分有线款和无线款&#xff0c;无线款会比有线款操作更加方便;洗地机怎么选&#xff0c;其实洗地机的清洁能力主要是看吸力大小…

C++:map和set的认识和简单使用/关联式容器

关联式容器 关联式容器即是用来存储数据的&#xff0c;并且存储的是<Key&#xff0c;Value>结构的键值对&#xff0c;在数据检索时效率比序列式容器高。 序列式容器也就是vector、list、queue等容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是…

虹科案例 | 对症下药,零售行业BI解决方案及实操案例!

数据源多难以整合&#xff1f; 无法实时访问数据&#xff1f; 数据分析难、价值共享难&#xff1f; 面对大量的数据&#xff0c;企业愈发头疼&#xff0c;尤其是零售行业。虹科Domo商业智能分析工具“对症下药”&#xff0c;为零售企业海量数据问题提供解决方案。 一、零售行业…

如何使用CRM做好交付项目管理

在企业客户生命旅程中&#xff0c;项目实施期是最为关键的阶段之一。项目交付物是衡量实施过程质量的重要指标之一。项目交付物也是项目实施过程中体现项目成果的重要依据&#xff0c;项目交付物还是项目实施全生命周期过程管理的综合结晶&#xff0c;所以项目过程管理中项目交…

nslookup命令使用技巧

前言 nslookup是一个DNS查询工具&#xff0c;可以指定查询的类型&#xff0c;可以查到DNS记录的生存时间&#xff0c;还可以指定使用哪个DNS服务器进行解释。 一、缺省查询 不指定 dns-server&#xff0c;使用系统默认的 dns 服务器。 nslookup 域名 通过上述命令的执行结果…

设计「业务」与「技术」方案

三天研发&#xff0c;两天设计&#xff1b; 01【优先做设计方案】 职场中的那些魔幻操作&#xff0c;研发最烦的是哪个&#xff1f; 作为一个数年且资深的互联网普通开发&#xff0c;可以来说明一下为什么是&#xff1a;缺乏设计&#xff1b; 面对业务需求的时候&#xff0c…

使用Vuex实现商品列表的校验、添加、删除、统计

场景&#xff1a;使用Vuex实现一个商品列表的添加、删除以及利用Vuex中的getters属性计算商品列表的总数总价格 添加商品时判断当前商品列表中是否包含了相同的商品 添加商品时&#xff0c;对添加表单做了校验 Vuex的使用及原理已经在上篇文章中介绍过了 vue2.x中使用vuex_前端…

XLSX插件使用 — 导入导出(含中文表头)(React+Antd 对上传表格做数据格式验证)

需求说明 1.需要前端做数据导出&#xff08;非调用接口&#xff09; 2.需要对上传的表格数据做验证&#xff0c;不通过验证需要提示格式不正确&#xff0c;阻拦上传 技术栈介绍 ReactAntdesignXLSX js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取…

Kafka技术认知

文章目录概念理解名词解释基本架构工作流程Kafka的特性概念理解 Kafka是分布式的基于发布-订阅消息队列。是一个分布式、支持分区的、多副本的&#xff0c;基于 Zookeeper 协调的分布式消息中间件系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各种需求场景…

FISCO BCOS 搭建区块链,在SpringBoot中调用合约

一、搭建区块链 使用的是FISCO BCOS 和 WeBASE-Front来搭建区块链&#xff0c;详细教程&#xff1a; https://blog.csdn.net/yueyue763184/article/details/128924144?spm1001.2014.3001.5501 搭建好能达到下图效果即可&#xff1a; 二、部署智能合约与导出java文件、SDK证…

【C语言】程序环境和预处理

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情 &#x1f6f8;C语言专栏&#xff1a;https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…

决策树和期望货币价值

1、决策树和期望货币价值&#xff08;决策树、表&#xff09;---风险管理决策树分析是风险分析过程中的一项常用技术。某企业在项目风险分析过程中&#xff0c;采用了决策树分析方法&#xff0c;并计算出了EMV&#xff08;期望货币值&#xff09;。以下说法中&#xff0c;正确的…

使用 OpenAI 的 ChatGPT 提高开发人员的工作效率

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 介绍 作为一名开发人…

第十天栈和队列

栈和队列的原理大家应该很熟悉了&#xff0c;队列是先进先出&#xff0c;栈是先进后出。首先大家要知道 栈和队列是STL&#xff08;C标准库&#xff09;里面的两个数据结构。接下来介绍的栈和队列也是SGI STL里面的数据结构&#xff0c; 知道了使用版本&#xff0c;才知道对应的…

雅思经验(6)

反正我是希望遇到的雅思听力section 4.里面填空的地方多一些&#xff0c;之后单选的部分少一些。练了一下剑9 test3 的section 4&#xff0c;感觉还是不难的&#xff0c;都是在复现&#xff0c;而且绕的弯子也不是很多。本次考试的目标就是先弄一个六分&#xff0c;也就是说&am…

构建Jenkins 2.340持续集成环境

一、前言 本文学习自&#xff1a;2022版Jenkins教程&#xff08;从配置到实战) 如有不妥&#xff0c;欢迎指正 二、构建资料 已经包括了本文档使用的所有所需的安装包 三、安装docker 1、解压docker docker-20.10.10.tgz2、复制文件 cp docker/* /usr/bin/3、编写启动文…