题目描述

某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目。花束可以移动,并且每束花用1到F的整数标识。如果I < J,则花束I必须放在花束J左边的花瓶中。例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有花束在放入花瓶时必须保持其标识数的顺序,即杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中。如果花瓶的数目大于花束的数目,则多余的花瓶必须空,即每个花瓶只能放一束花。

每个花瓶的形状和颜色也不相同,因此,当各个花瓶中放入不同的花束时,会产生不同的美学效果,并以美学值(一个整数)来表示,空置花瓶的美学值为0。在上述的例子中,花瓶与花束的不同搭配所具有的美学值,可以用如下的表格来表示:

花瓶1 花瓶2 花瓶3 花瓶4 花瓶5

杜鹃花 7 23 -5 -24 16

秋海棠 5 21 -4 10 23

康乃馨 -21 5 -4 -20 20

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

为了取得最佳的美学效果,必须在保持花束顺序的前提下,使花的摆放取得最大的美学值,如果具有最大美学值的摆放方式不止一种,则输出任何一种方案即可。

输入输出格式

输入格式:

输入文件的第一行是两个整数F和V,分别为花束数和花瓶数(1≤F≤100,F≤V≤100)。接下来是矩阵Aij,它有I行,每行J个整数,Aij表示花束I摆放在花瓶J中的美学值。

输出格式:

输出文件的第一行是一个整数,为最大的美学值;接下来有F行,每行两个数,为那束花放入那个花瓶的编号。

输入输出样例

输入样例#1://这个输入样例已经被博主改正过啦,可以放心复制,洛谷的样例六个负号五个是全角,scanf读不进去啊

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

输出样例#1:

53
2  4  5

吐槽

  洛谷的样例六个负号五个是全角,scanf读不进去啊,我从0:30到1:50一直在找程序哪里错了(头脑不清醒,效率低),gdb一遍遍卡在读入那里——为什么负数读不进去呐~~~~

解题思路

  这题是IOI1999T1,几乎可以看成1994年IOI的数塔问题,这道题简直是动规入门神级好题,我之前几篇讲DP的博文多次贴这个链接了(以前IOI的T1好水啊)

  花瓶数不等于花束数时,输入给的那个表左下角和右上角都没用了。

  $f[i][j]$表示前$i$束花放进前$j$个花瓶能得到的最大美学值。第一重循环$i$一束束增加花,第二重循环$j$枚举第$i$朵花放到第j个花瓶的情况,第三重循环$k$求第$i-1$束花放在哪里,换句话说,第$i$朵花放在第$j$个瓶所获得的美学值从上一束花哪个瓶转移来最大

源代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int n,m;
int v[105][105];
int use[105][105];
int f[105][105];
void col(int flower,int i)//递归输出方案,可以手写循环实现
{if(i==1){printf("%d ",flower);return;}col(use[i][flower],i-1);printf("%d ",flower);
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&v[i][j]);memset(f,128,sizeof(f));for(int i=1;i<=m;i++) f[1][i]=v[1][i];for(int i=2;i<=n;i++){for(int j=i,e=m-n+i;j<=e;j++){for(int k=i-1;k<j;k++){if(f[i-1][k]+v[i][j]>f[i][j]){f[i][j]=f[i-1][k]+v[i][j];use[i][j]=k;}}}}int maxf=-1e9,flower;for(int i=n;i<=m;i++)if(maxf<f[n][i])maxf=max(maxf,f[n][i]),flower=i;printf("%d\n",maxf);col(flower,n);return 0;
}

洛谷 P1854 花店橱窗布置相关推荐

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

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

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

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

  3. 花店橱窗布置(洛谷P1854)(动态规划)

    传送门 文章目录 解析 问题 代码 解析 一道很正常的动态规划 dp[i][j]表示到第j个花瓶放了第j朵花的dp最优值 注意:是严格使第i朵放在j瓶 找到最优解递归输出即可 问题 又是初始化的问题! ...

  4. rqnoj 496 [IOI1999]花店橱窗布置 (简单dp)

    很水,我却做了很久,唉,细节的东西没处理好... 又要顺序又要最大的,看上去感觉就和LCS一样,很容易想出状态转移公式:dp[i,j] = max{dp[i - 1][j - 1] + a[i][j] ...

  5. IOI1999 花店橱窗布置

    Luogu 这可能是继数字金字塔后IOI最水的一道题了.(然而我也就只能做这种水题 设\(dp[i,j]\)表示第\(i\)行选到第\(j\)个最优解,状态转移方程很显然,如下 \[dp[i,j]=\ ...

  6. codevs 1028 花店橱窗布置 (KM)

    /*裸地KM*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 110 #d ...

  7. 洛谷 深基 第4部分 基础数学与数论(19-21课)

    洛谷 深基 第4部分 基础数学与数论  第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...

  8. 榨取kkksc03(洛谷-P1855)

    题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一次公开比赛),那么 ...

  9. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  10. 洛谷 1855——榨取kkksc03

    题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一次公开比赛),那么 ...

最新文章

  1. JavaScript 方法传参
  2. hive常见的建表方式有哪些?各自的使用场景是?
  3. EJS脚本中MD5应用
  4. PLIP--Linux 并口网络解决方法
  5. matlab 均值滤波
  6. 服务器安全组微信支付,微信支付设置
  7. vb6 控件未注册问题解决
  8. 【大数据】分布式机器学习平台
  9. 小猫钓鱼纸牌游戏java_纸牌游戏----小猫钓鱼
  10. 如何玩转互联网金融大数据——征信
  11. 【转】凡事事必躬亲 是一种恶习
  12. linux下md5sum命令的使用
  13. [从头读历史] 第265节 诗经 周南
  14. 自然数拆分Lunatic版
  15. python折叠次数计算珠穆朗玛峰_2019-07-26python作业2
  16. 会计学(非专业)第7章 固定资产
  17. myeclipse7.0下载
  18. 建筑的永恒之道----道之核心
  19. linux系统grep命令匹配关键字前后几行内容
  20. 备忘录模式——实现象棋悔棋

热门文章

  1. PouchDB 基础
  2. [RMQ] [线段树] POJ 3368 Frequent Values
  3. 最近要使用User Interface Process Application Block for .NET(微软net开发架构)
  4. GARFIELD@02-21-2005
  5. Linux安装redis(6.0.9)环境
  6. python 简单的接口测试框架
  7. ABAP中的枚举对象
  8. python练习册 每天一个小程序 第0010题
  9. Qt5 程序启动画面图片效果
  10. Android之Adapter用法总结-(转)