【NOIP普及组】摆花

【NOIP普及组】摆花

      • C语言代码
      • C++ 代码
      • Java代码
      • Python代码


💐The Begin💐点点关注,收藏不迷路💐

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

输入

共 2 行。 第一行包含两个正整数 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

C语言代码

#include <stdio.h>
#include <stdlib.h>#define MOD 1000007int main() {int numFlowerTypes, totalFlowers;  // 花的种类数和总花盆数scanf("%d %d", &numFlowerTypes, &totalFlowers);int *flowerLimits = (int *)malloc((numFlowerTypes + 1) * sizeof(int));  // 存储每种花的数量限制for (int i = 1; i <= numFlowerTypes; i++) {scanf("%d", &flowerLimits[i]);}int dp[numFlowerTypes + 1][totalFlowers + 1];  // 动态规划数组,dp[i][j]表示用前i种花摆j盆花的方案数// 初始化边界条件,当没有花时,只有一种摆法(即什么都不摆)dp[0][0] = 1;for (int j = 1; j <= totalFlowers; j++) {dp[0][j] = 0;}// 动态规划计算过程for (int i = 1; i <= numFlowerTypes; i++) {for (int j = 0; j <= totalFlowers; j++) {// 先初始化为不选第i种花的情况,即用上i - 1种花摆j盆花的方案数dp[i][j] = dp[i - 1][j];// 再考虑选第i种花的情况,累加不同摆放数量的方案数for (int k = 1; k <= flowerLimits[i] && k <= j; k++) {dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % MOD;}}}// 输出最终结果printf("%d\n", dp[numFlowerTypes][totalFlowers]);free(flowerLimits);  // 释放动态分配的内存return 0;
}

C++ 代码

#include <iostream>
#include <vector>const int MOD = 1000007;int main() {int numFlowerTypes;  // 花的种类数int totalFlowers;  // 总花盆数std::cin >> numFlowerTypes >> totalFlowers;std::vector<int> flowerLimits(numFlowerTypes + 1);  // 存储每种花的数量限制for (int i = 1; i <= numFlowerTypes; i++) {std::cin >> flowerLimits[i];}std::vector<std::vector<int>> dp(numFlowerTypes + 1, std::vector<int>(totalFlowers + 1));  // 动态规划数组// 初始化边界条件dp[0][0] = 1;for (int j = 1; j <= totalFlowers; j++) {dp[0][j] = 0;}// 动态规划计算过程for (int i = 1; i <= numFlowerTypes; i++) {for (int j = 0; j <= totalFlowers; j++) {// 先初始化为不选第i种花的情况dp[i][j] = dp[i - 1][j];// 再考虑选第i种花的情况,累加不同摆放数量的方案数for (int k = 1; k <= flowerLimits[i] && k <= j; k++) {dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % MOD;}}}// 输出最终结果std::cout << dp[numFlowerTypes][totalFlowers] << std::endl;return 0;
}

Java代码

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;public class FlowerArrangement {public static final int MOD = 1000007;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int numFlowerTypes = scanner.nextInt();  // 花的种类数int totalFlowers = scanner.nextInt();  // 总花盆数List<Integer> flowerLimits = new ArrayList<>();  // 存储每种花的数量限制for (int i = 0; i < numFlowerTypes; i++) {flowerLimits.add(scanner.nextInt());}int[][] dp = new int[numFlowerTypes + 1][totalFlowers + 1];  // 动态规划数组// 初始化边界条件dp[0][0] = 1;for (int j = 1; j <= totalFlowers; j++) {dp[0][j] = 0;}// 动态规划计算过程for (int i = 1; i <= numFlowerTypes; i++) {for (int j = 0; j <= totalFlowers; j++) {// 先初始化为不选第i种花的情况dp[i][j] = dp[i - 1][j];// 再考虑选第i种花的情况,累加不同摆放数量的方案数for (int k = 1; k <= flowerLimits.get(i) && k <= j; k++) {dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % MOD;}}}// 输出最终结果System.out.println(dp[numFlowerTypes][totalFlowers]);scanner.close();}
}

Python代码

MOD = 1000007num_flower_types, total_flowers = map(int, input().split())  # 读取花的种类数和总花盆数flower_limits = [0] + list(map(int, input().split()))  # 存储每种花的数量限制,索引从1开始对应花的种类dp = [[0] * (total_flowers + 1) for _ in range(num_flower_types + 1)]  # 动态规划二维列表
# 初始化边界条件
dp[0][0] = 1
for j in range(1, total_flowers + 1):dp[0][j] = 0# 动态规划计算过程
for i in range(1, num_flower_types + 1):for j in range(0, total_flowers + 1):# 先初始化为不选第i种花的情况dp[i][j] = dp[i - 1][j]# 再考虑选第i种花的情况,累加不同摆放数量的方案数for k in range(1, min(flower_limits[i] + 1, j + 1)):dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % MOD# 输出最终结果
print(dp[num_flower_types][total_flowers])

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf转excel;pdf中表格提取

一、问题描述 在工作中或多或少会遇到&#xff1a;需要将某份pdf中的表格数据提取出来&#xff0c;以便能够“修改使用”数据 可将pdf中的表格提取出来&#xff0c;解决办法还有点复杂 尤其涉及“pdf中表格不是标准的单元格”的时候&#xff0c;提取数据到excel不太容易 比…

Qt中 QWidget 和 QMainWindow 区别

QWidget 用来构建简单窗口 QMainWindow 用来构建更复杂的窗口&#xff0c;QMainWindow 继承自QWidget&#xff0c;在QWidget 的基础上提供了菜单栏、工具栏、状态栏等功能 菜单栏&#xff08;QMenuBar&#xff09;工具栏&#xff08;QToolBar&#xff09;状态栏&#xff08;Q…

《深入浅出Apache Spark》系列③:Spark SQL解析层优化策略与案例解析

导读&#xff1a;本系列是Spark系列分享的第三期。第一期分享了Spark Core的一些基本原理和一些基本概念&#xff0c;包括一些核心组件。Spark的所有组件都围绕Spark Core来运转&#xff0c;其中最活跃的一个上层组件是Spark SQL。第二期分享则专门介绍了Spark SQL的基本架构和…

安全的时钟启动

Note&#xff1a;文章内容以 Xilinx 系列 FPGA 进行讲解 1、什么是安全启动时钟 通常情况下&#xff0c;在MMCM/PLL的LOCKED信号抬高之后&#xff08;由0变为1&#xff09;&#xff0c;MMCM/PLL就处于锁定状态&#xff0c;输出时钟已保持稳定。但在此之前&#xff0c;输出时钟会…

【mongodb】数据库的安装及连接初始化简明手册

NoSQL(NoSQL Not Only SQL )&#xff0c;意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 通过应用实践证明&#xff0c;关系模型是非常适合于客户服务器…

丹韵红墙成红毯至美背景!冠珠华脉「雍华京韵」于M essential大秀绽放京韵时尚

东方美学代表品牌M essential近日于上海科学会堂举办十周年大秀&#xff0c;并发布品牌全新2024/25冬春系列。冠珠瓷砖作为国风新韵合作品牌&#xff0c;以高定岩板华脉「雍华京韵」系列的宫墙丹韵打造红毯背景墙&#xff0c;中国高定岩板与中国高级时装作品碰撞着“中国美”的…

工程认证与Spring Boot:计算机课程管理的新探索

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足&#xff0c;创建了一个计算机管理基于工程教育认…

excel功能

统计excel中每个名字出现的次数 在Excel中统计每个名字出现的次数&#xff0c;您可以使用COUNTIF函数或数据透视表。以下是两种方法的详细步骤&#xff1a; 方法一&#xff1a;使用COUNTIF函数 准备数据&#xff1a;确保您的姓名列表位于一个连续的单元格区域&#xff0c;例如…

【flask开启进程,前端内容图片化并转pdf-会议签到补充】

flask开启进程,前端内容图片化并转pdf-会议签到补充 flask及flask-socketio开启threading页面内容转图片转pdf流程前端主js代码内容转图片-browser端browser端的同步编程flask的主要功能route,def 总结 用到了pdf,来回数据转发和合成,担心flask卡顿,响应差,于是刚好看到threadi…

聊一聊Spring中的自定义监听器

前言 通过一个简单的自定义的监听器&#xff0c;从源码的角度分一下Spring中监听的整个过程&#xff0c;分析监听的作用。 一、自定义监听案例 1.1定义事件 package com.lazy.snail;import lombok.Getter; import org.springframework.context.ApplicationEvent;/*** Class…

VMWareTools安装及文件无法拖拽解决方案

文章目录 1 安装VMWare Tools2 安装vmware tools之后还是无法拖拽文件解决方案2.1 确认vmware tools安装2.2 客户机隔离2.3 修改自定义配置文件2.4 安装open-vm-tools-desktop软件 1 安装VMWare Tools 打开虚拟机VMware Workstation&#xff0c;启动Ubuntu系统&#xff0c;菜单…

ADC前端控制与处理模块--AD7606_Module

总体框架 AD7606_Module主要由3个模块组成组成&#xff0c;AD7606_Data_Pkt和AD7606_Drive以及AD7606_ctrl。 1.AD7606_Data_Pkt主要作用是把AD芯片数据组好数据包&#xff0c;然后发送给上位机&#xff1b; 2.AD7606_Drive主要负责和芯片的交互部分 3.AD7606_ctrl控制模块的作…

Unity 插件 - Project窗口资源大小显示

Unity 插件 - Project窗口资源大小显示 &#x1f354;功能&#x1f32d;安装 &#x1f354;功能 &#x1f4a1;.显示Project Assets 和Packages下所有文件的大小&#xff08;右侧显示&#xff09; &#x1f4a1;.统计选中文件夹及其子文件夹下所有文件的大小并显示&#xff08…

HTB:Photobomb[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口开放扫描 再次使用nmap对靶机开放端口进行脚本、服务扫描 使用ffuf进行简单的子域名扫描 使用浏览器直接访问该域名 选取一个照片进行下载&#xff0c;使用Yakit进行抓包 USER_FLAG&#xff1a;a9afd9220ae2b5731…

ssm教室信息管理系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 …

详解Java之Spring MVC篇二

目录 获取Cookie/Session 理解Cookie 理解Session Cookie和Session的区别 获取Cookie 获取Session 获取Header 获取User-Agent 获取Cookie/Session 理解Cookie HTTP协议自身是“无状态”协议&#xff0c;但是在实际开发中&#xff0c;我们很多时候是需要知道请求之间的…

量子计算及其在密码学中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 引言 量子计算概述 定义与原理 发展…

当财政支持减弱时,国有企业如何实现降本增效?

当财政支持减弱时&#xff0c;国有企业如何实现降本增效&#xff1f; 随着市场环境的不断变化和上级市场化政策要求的不断推进&#xff0c;部分国有企业面临着双重压力&#xff0c;一方面&#xff0c;市场的快速变革要求企业不断创新、提升竞争力&#xff1b;另一方面&#xff…

引入 axios,根据 api 文档生成调用接口

起步 | Axios Docs 安装 axios npm install axios 生成 api 调用接口【可选】 https://github.com/ferdikoomen/openapi-typescript-codegen 安装 npm install openapi-typescript-codegen --save-dev 然后执行生成代码 # http://localhost:8805/api/user/v3/api-docs&a…

ElasticSearch的Python Client测试

一、Python环境准备 1、下载Python安装包并安装 https://www.python.org/ftp/python/3.13.0/python-3.13.0-amd64.exe 2、安装 SDK 参考ES官方文档: https://www.elastic.co/guide/en/elasticsearch/client/index.html python -m pip install elasticsearch一、Client 代…