当前位置: 首页 > news >正文

算法题(222):摆花

审题:

本题需要我们在1~n种有数量限制的花中选取m盆组成一种摆花方案(需要取模1e6+7),且该方案不用考虑排列

思路:

方法一:动态规划

(1)状态表示:

f[i][j]表示在种类1~i范围的花中选择j盆花的所有方案数

(2)状态转移方程:
情况1:不选择i

情况2:选择k个i

其中情况2需要用for循环来计算,且进入for循环计算前一定要满足两个条件

条件1:j >= k,若j小于k说明可选择的盆数j小于想选择的盆数k,非法情况

条件2:k <= a[i],若k大于a[i],说明想选择i花的盆数k大于可选择的i花盆数a[i]

(3)初始化:
经过分析,第一行除了(0,0)有一种合法方案,其他位置都是无法达成的,所以要初始化为0,且根据状态转移方程,我们当前节点依赖的都是上一行的节点,所以初始化第一行即可接着计算后面的数据

综上,先全部初始化为0,然后单独将(0,0)赋值为1

(4)填表顺序:
根据状态转移方程,我们纵向从上往下(1~n)遍历即可

(5)答案输出:
直接输出f[n][m]即可

(6)空间优化:
我们本题属于多重背包,且是求方案数的问题,所以只能使用普通的降维,无法进一步使用二进制空间优化

而根据状态转移方程可知,当前节点依赖上一行数据,为了防止数据覆盖,我们需要在横向倒着填表

解题:
空间优化版本

#include<iostream>
using namespace std;
const int N = 110,MOD = 1e6+7;
int n, m;
int a[N], f[N];
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a[i];}//初始化f[0] = 1;//填表for (int i = 1; i <= n; i++){for (int j = m; j >= 0; j--){for (int k = 1; k <= min(j, a[i]); k++){f[j] =(f[j]+f[j - k])%MOD;}}}//答案输出cout << f[m] << endl;return 0;}

P1077 [NOIP 2012 普及组] 摆花 - 洛谷

http://www.dtcms.com/a/427618.html

相关文章:

  • 如何向alexa提交网站wordpress custom login
  • SpringCloud电商微服务项目衣拉客搭建指南
  • dev c++工具下载 dev c++安装包下载 dev c++软件网盘资源分享
  • 如何去掉Excel多余空行
  • 房地产网站欣赏万网空间管理
  • 做多语言网站多少钱免费网站安全软件大全下载安装
  • 【密码学实战】openHiTLS X509命令行工具: 数字证书生成与转换
  • 从“减塑”到“降碳”新天力“2R”模式推动行业低碳转型
  • AFSim雷达显控一体化
  • 网站建设类型智盈中心网站建设
  • 零基础从头教学Linux(Day 45)
  • 网站策划方案论文wordpress软件网站模板下载
  • 大数据变长存储算法
  • Ubuntu22.04安装Samba服务器
  • NACHI那智焊接机器人智能气阀
  • 网站怎么申请怎么注册交友软件网站建设
  • 网站建设官网多少钱设计公司名字logo
  • 安卓开发---通信录的UI实例
  • 35互联做的网站效果图制作教程
  • Gitee - IDEA 主支 master 和分支 dev 的使用
  • grep 命令处理文件差集
  • MySQL终极备份指南:用Percona XtraBackup实现零数据丢失!
  • FPGA实现SRIO图像视频传输,基于Serial Rapidlo Gen2,提供6套工程源码和技术支持
  • 网站推广渠道有哪些加盟编程教育哪家好
  • GitOps实战:Helm一键部署ArgoCD
  • 聊城冠县网站建设无锡seo公司哪家好
  • 一个专业做设计的网站软件工程师前景及待遇
  • 为 CPU 减负:数据中心网络卸载技术的演进
  • phpstudy配置网站北京网站建设公司哪家最好
  • 《考研408数据结构》第三章(3.1 栈)复习笔记