博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1077 摆花
阅读量:4316 次
发布时间:2019-06-06

本文共 1114 字,大约阅读时间需要 3 分钟。

题解

 实际上,这是一个背包问题

分组背包 + 背包方案数

 

这道题的费用在哪里鸭??

 隐含在题目里:摆花总盆数不超过 m 

也就是花拥有了 ‘ 盆数 ’ 费用

 

为什么是分组背包??

因为一种花最多可以摆 ai 盆,相同花色的花摆在一起,花没有编号,摆哪一盆都是一样的

所以对于同一种花,摆0盆就是一个亚子,摆1盆就是另一种亚子,摆2盆还是一种亚子... 但是这些亚子都是相互冲突的啊,摆了一盆就不能摆两盆了(显然

 

背包方案数??

自然是方案数的累加了

 

注意:

f [m] 为摆 m 盆花的最大方案数

边界:f [0] =1

转移方程:f [ j ]=( f[ j ] +f[ j - .. ] )

 

代码

#include
using namespace std;const int mod=1e6+7;int n,m,ans=0;int a[105],w[105][105];long long f[105]; //开小的话会炸 int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } memset(f,0,sizeof(f)); f[0]=1; //处理边界:摆0盆花有一种方案 for(int i=1;i<=n;i++) for(int j=m;j>=0;j--) for(int k=1;k<=a[i];k++) //分组,第i组中的每一种情况,k要从1开始枚举啊 //要是从0开始的话,那么一开始f[j]就翻倍了 { f[j]=(f[j]%mod+f[j-k]%mod)%mod; } cout<

 

 

 

困惑

细心的小可爱会发现代码里面那个 w 二维数组定义了以后就再也没有提及它了

提交代码的时候不加会WA,加了就AC没事了,可能是RP问题吧QAQ

之前也遇到过这种情况QAQ

 

解释一下w是干啥的:(不想看的可以走了)

一开始构建代码的时候,想着既然是分组背包,就开个数组记录一下每一组的情况吧

w[i][j]表示第 i 种花摆 j 盆的 ‘ 件数 ’ 费用,后来发现可以不用,直接用 k 代替就好了(没错,就是第三重for循环的那个k)

但是现在它没用了QAQ

 

转载于:https://www.cnblogs.com/xiaoyezi-wink/p/11049353.html

你可能感兴趣的文章
windows 不能在 本地计算机 启动 Apache
查看>>
iOS开发报duplicate symbols for architecture x86_64错误的问题
查看>>
Chap-6 6.4.2 堆和栈
查看>>
【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
查看>>
C# MySql 连接
查看>>
网络抓包分析方法大全
查看>>
sql 数据类型
查看>>
android 截图
查看>>
WebServicer接口类生成方法。
查看>>
POJ 1740
查看>>
【翻译】火影忍者鸣人 疾风传 终级风暴2 制作介绍
查看>>
http和webservice
查看>>
hdu1879------------prim算法模板
查看>>
jdbc之二:DAO模式
查看>>
MySQL性能优化方法一:缓存参数优化
查看>>
Angular2 - 概述
查看>>
正则表达式tab表示\t
查看>>
NodeJS+Express+MongoDB 简单实现数据录入及回显展示【Study笔记】
查看>>
Highcharts使用指南
查看>>
网络基础(子网划分)
查看>>