花店橱窗 线性dp

本文介绍了一道关于花束摆放以获得最大美观程度的动态规划问题。题目要求保持花束标识顺序,根据给定的美观程度值找出最佳摆放方案。通过线性dp方法解决此问题,博主分享了具体的解题思路和代码实现,强调了第二问的解题关键在于回溯dp数组找到最优解。
摘要由CSDN通过智能技术生成

Description
每种花都有一个标识,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有的花束在放入花瓶时必须保持其标识数的顺序,即:杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中。如果花瓶的数目大于花束的数目。则多余的花瓶必须空置,且每个花瓶中只能放一束花。

每种花放在不同的瓶子里会产生不同的美观程度,美观程度可能是正数也可能是负数。

上述例子中,花瓶与花束的不同搭配所具有的美观程度,如下表所示:

                  花    瓶

           1     2    3    4    5

1 (杜鹃花) 7 23 -5 -24 16

2 (秋海棠) 5 21 -4 10 23

3 (康乃馨) -21 5 -4 -20 20

根据上表,杜鹃花放在花瓶2中,会显得非常好看;但若放在花瓶4中则显得十分难看。

为取得最大美观程度,你必须在保持花束顺序的前提下,使花束的摆放取得最大的美学值,并求出每种花应该摆放的花瓶的编号。

Input Format
第1行:两个整数F和V,表示xq和xz一共有F种花,V个花瓶。(1<=F<=V<=100)

第2行到第F+1行:每行有V个数,表示花摆放在不同花瓶里的美观程度值value。(美观程度和不超过maxint,美观程度有正有负。)

Output Format
输出有两行:第一行为输出最大美观程度和的值,第二行有F个数表示每朵花应该摆放的花瓶的编号。

Sample Input
3 5
7 23 -5 -24 16
5 21 -4 10 23
-21 5 -4 -20 20
Sample Output
53
2 4 5


这是道线性dp,(非常简单 ),第一问就不说了,说说第二问,这才是从中发现的一种写法,在已经知道ans的情况下去写第二问,就是在使用刚才用的f数组,从最后的一层向第一层去,减去每次出现过的数,比对有是否相同的值,记录下来。最后从前开始输出就可以了。

	for(int i=n;i<=m;i++) if(ans<f[n][i]) ans=f[n][i],st=i;//记录这个最大的值的最后一个位置
	printf("%lld\n",ans);
	for(int i=n-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值