【算法详解】 NOIP2012普及T3:摆花

本文介绍了NOIP2012普及组的一道题目,涉及花店门口摆花的方案计数问题。作者使用二维动态规划的方法求解,解释了如何初始化状态和进行状态转移,并给出了简洁的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

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

Solution

我表示…好尴尬啊…看到题目,然后一写完就直接…AC啦?作为一个蒟蒻无法相信能做出普及T3…这就是传说中的RP来了吗

然后一看题解,又是判断越界的,又是用滚动数组的,又是各种用深搜的,太强啦,都是大佬啊,作为蒟蒻不懂…就这么过了妈呀数据好水…

那好吧,言归正传:这道题目作为普及组的T3确实有点水了,我们可以用最简单的二维动态规划来解决这道题目,即:

设f[i][j]为选择了前i种花,一共选择了j盆花的方案数总和.

然后初始化就是:f[0][0]=1(不要问我为什么,蒟蒻认为一般二维的要求方案数的动态规划都是f[0][0]=1吧)

然后,激动人心的状态转移方程登场啦:f[i][j]的转移必须与前i-1种花的方案数有关,即f[i-1][…]然后又和前面计算的总和有关,当我们不知道最后的总和确切是几,这种花到底选几盆,因此我们多一层循环k来枚举选这朵花的数量,方然也可以不选…

然后,闪亮登场啦:f[i][j]=sum(f[i−1][j−k])0≤k≤a[i]f[i][j]=sum(f[i-1][j-k])0≤k≤a[i]f[i][j]=sum(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值