5E02 花店橱窗 0x5E「动态规划」练习

背景

xq和他的老婆xz最近开了一家花店,他们准备把店里最好看的花都摆在橱窗里。但是他们有很多花瓶,每个花瓶都具有各自的特点,因此,当各个花瓶中放入不同的花束时,会产生不同的美学效果。为了使橱窗里的花摆放的最合适,他们得想个办法安排每种花的摆放位置。
可是因为xq和xz每天都太忙,没有时间设计橱窗里花的摆法,所以他们想让你帮他们求出花摆放的最大美观程度和每种花所放的位置。

描述

每种花都有一个标识,假设杜鹃花的标识数为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中则显得十分难看。

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

输入格式

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

输出格式

输出有两行:第一行为输出最大美观程度和的值,第二行有F个数表示每朵花应该摆放的花瓶的编号。若有多种方案,输出字典序较小的(美观程度不变的情况下,花尽量往前放)

样例输入

3 5
7 23 -5 -24 16
5 21 -4 10 23
-21 5 -4 -20 20

样例输出

53
2 4 5

题意:

有f种花,v个花瓶。每种花放在不同的花瓶得到的beauty值是不同的,给出这个价值矩阵。摆放花的顺序不可以改变,即花的序号是递增的。现在问一个方案,使得beauty之和是最大的。输出方案。

思路:

原来的思路是 用dp[i][j]表示前j个花瓶摆了i种花,用j作为阶段。但是这样好像不是很好输出路径。

应该用dp[i][j]表示第i种花放在第j个花瓶。然后枚举k,表示第i-1种花放在第k个花瓶。

 1 //#include <bits/stdc++.h>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<stdio.h>
 6 #include<cstring>
 7 #include<vector>
 8 #include<map>
 9
10 #define inf 0x3f3f3f3f
11 using namespace std;
12 typedef long long LL;
13
14 int f, v;
15 int val[105][105], dp[105][105], path[105][105], res[105];
16
17
18 int main()
19 {
20     scanf("%d%d", &f, &v);
21     for(int i = 1; i <= f; i++){
22         for(int j = 1; j <= v; j++){
23             scanf("%d", &val[i][j]);
24         }
25     }
26
27     memset(dp, -inf, sizeof(dp));
28     for(int i = 1; i <= v; i++){
29         dp[1][i] = val[1][i];
30     }
31     for(int i = 2; i <= f; i++){
32         for(int j = i; j <= v - (f - i); j++){
33             for(int k = i - 1; k < j; k++){
34                 if(dp[i - 1][k] > dp[i][j]){
35                     dp[i][j] = dp[i - 1][k];
36                     path[i][j] = k;
37                 }
38             }
39             dp[i][j] += val[i][j];
40         }
41     }
42
43     int pos, ans = -inf;
44     for(int i = v - f; i <= v; i++){
45         if(dp[f][i] > ans){
46             ans = dp[f][i];
47             pos = i;
48         }
49     }
50     printf("%d\n", ans);
51     res[f] = pos;
52     for(int i = f - 1; i >= 1; i--){
53         res[i] = path[i + 1][res[i + 1]];
54     }
55     printf("%d", res[1]);
56     for(int i = 2; i <= f; i++){
57         printf(" %d", res[i]);
58     }
59     printf("\n");
60     return 0;
61 }

转载于:https://www.cnblogs.com/wyboooo/p/9767209.html

CH5E02 花店橱窗【线性DP】相关推荐

  1. AcWing 313. 花店橱窗(DP)

    小q和他的老婆小z最近开了一家花店,他们准备把店里最好看的花都摆在橱窗里. 但是他们有很多花瓶,每个花瓶都具有各自的特点,因此,当各个花瓶中放入不同的花束时,会产生不同的美学效果. 为了使橱窗里的花摆 ...

  2. 【DP】花店橱窗布置 (ssl 1626/luogu 1854)

    花店橱窗布置花店橱窗布置花店橱窗布置 ssl 1626 luogu 1854 题目大意: 有n朵花和m个花瓶,每一朵花插在不同的花瓶里会有不同的美丽度,花瓶和花必须按原来的顺序摆放,求最大的美丽值 D ...

  3. [JOYOI] 1124 花店橱窗

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目背景xq和他的老婆xz最近开了一家花店,他们准备把店里最好看的花都摆在橱窗里.但是他们有 ...

  4. 动态规划 —— 线性 DP

    [概述] 线性动态规划,是较常见的一类动态规划问题,其是在线性结构上进行状态转移,这类问题不像背包问题.区间DP等有固定的模板. 线性动态规划的目标函数为特定变量的线性函数,约束是这些变量的线性不等式 ...

  5. 信息学奥赛一本通 1279:【例9.23】橱窗布置(flower) | 洛谷 P1854 花店橱窗布置

    [题目链接] ybt 1279:[例9.23]橱窗布置(flower) 洛谷 P1854 花店橱窗布置 吐槽:一本通中给的测试数据中,负号是全角负号!怪不得每次数据读不完程序就结束了.还是用洛谷的测试 ...

  6. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  7. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  8. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  9. CodeForces - 1096D Easy Problem(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...

最新文章

  1. 转载一篇开源http服务器(C语言)
  2. php如何修改xml中element值,php修改xml节点的值
  3. 自旋锁/互斥锁/读写锁/递归锁的区别与联系
  4. SDOI2017R1(姑且是游记)
  5. org.neo4j.kernel.StoreLockException: Store and its lock file has been locked by another process
  6. java中如何用2位数表示日期_java – 如何解析2位数的年份日期?
  7. JAVA泛型_泛型类、接口、通配符、方法、上下边界
  8. JRE解压缩后手动配置注册表
  9. 计算机学院品牌活动总结,计算机学院研究生会工作总结
  10. 【第1章】凸集——几种重要的凸集
  11. LOJ10144宠物收养所
  12. 使用Django创建一份在线简历
  13. 怎样在电脑上查学生的准考证
  14. Collecting Luggage - UVALive 2397 - 蓝桥杯 算法训练
  15. 实现vue页面下载成word文档
  16. [Pycharm] 取消被excluded的文件夹
  17. jQuery与javascript库
  18. oauth2.0--基础--01--理论
  19. 线性表--数组数据结构python实现
  20. 写python,用哪个软件好。

热门文章

  1. SVN提示:由于目标机器积极拒绝,无法连接 的解决方法
  2. Java中 volatile 关键字的最全总结,快给自己查缺补漏吧!
  3. 朋友,别告诉我你懂分布式事务!
  4. 通俗讲解分布式锁,看完不懂算作者输
  5. 算法与面试之-如何准备算法面试
  6. Spring Cloud构建微服务架构(二)服务消费者
  7. 网络:TCP协议3次握手4次挥手
  8. 2013年计算机专业对口模拟试题二,计算机对口升学模拟试题全解.doc
  9. 显示屏连接控制卡超时_小间距led显示屏的安装步骤
  10. oracle11gr2 active data guard,Oracle11gR2 Aactive DataGuard(手动)装配部署及维护文档(三)之升级及rman...