洛谷 P1854 花店橱窗布置
题目描述
某花店现有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行,每行两个数,为那束花放入那个花瓶的编号。
输入输出样例
3 5 7 23 -5 -24 16 5 21 -4 10 23 -21 5 -4 -20 20
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 花店橱窗布置相关推荐
- 信息学奥赛一本通 1279:【例9.23】橱窗布置(flower) | 洛谷 P1854 花店橱窗布置
[题目链接] ybt 1279:[例9.23]橱窗布置(flower) 洛谷 P1854 花店橱窗布置 吐槽:一本通中给的测试数据中,负号是全角负号!怪不得每次数据读不完程序就结束了.还是用洛谷的测试 ...
- 【DP】花店橱窗布置 (ssl 1626/luogu 1854)
花店橱窗布置花店橱窗布置花店橱窗布置 ssl 1626 luogu 1854 题目大意: 有n朵花和m个花瓶,每一朵花插在不同的花瓶里会有不同的美丽度,花瓶和花必须按原来的顺序摆放,求最大的美丽值 D ...
- 花店橱窗布置(洛谷P1854)(动态规划)
传送门 文章目录 解析 问题 代码 解析 一道很正常的动态规划 dp[i][j]表示到第j个花瓶放了第j朵花的dp最优值 注意:是严格使第i朵放在j瓶 找到最优解递归输出即可 问题 又是初始化的问题! ...
- rqnoj 496 [IOI1999]花店橱窗布置 (简单dp)
很水,我却做了很久,唉,细节的东西没处理好... 又要顺序又要最大的,看上去感觉就和LCS一样,很容易想出状态转移公式:dp[i,j] = max{dp[i - 1][j - 1] + a[i][j] ...
- IOI1999 花店橱窗布置
Luogu 这可能是继数字金字塔后IOI最水的一道题了.(然而我也就只能做这种水题 设\(dp[i,j]\)表示第\(i\)行选到第\(j\)个最优解,状态转移方程很显然,如下 \[dp[i,j]=\ ...
- codevs 1028 花店橱窗布置 (KM)
/*裸地KM*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 110 #d ...
- 洛谷 深基 第4部分 基础数学与数论(19-21课)
洛谷 深基 第4部分 基础数学与数论 第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...
- 榨取kkksc03(洛谷-P1855)
题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一次公开比赛),那么 ...
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines
P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...
- 洛谷 1855——榨取kkksc03
题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一次公开比赛),那么 ...
最新文章
- JavaScript 方法传参
- hive常见的建表方式有哪些?各自的使用场景是?
- EJS脚本中MD5应用
- PLIP--Linux 并口网络解决方法
- matlab 均值滤波
- 服务器安全组微信支付,微信支付设置
- vb6 控件未注册问题解决
- 【大数据】分布式机器学习平台
- 小猫钓鱼纸牌游戏java_纸牌游戏----小猫钓鱼
- 如何玩转互联网金融大数据——征信
- 【转】凡事事必躬亲 是一种恶习
- linux下md5sum命令的使用
- [从头读历史] 第265节 诗经 周南
- 自然数拆分Lunatic版
- python折叠次数计算珠穆朗玛峰_2019-07-26python作业2
- 会计学(非专业)第7章 固定资产
- myeclipse7.0下载
- 建筑的永恒之道----道之核心
- linux系统grep命令匹配关键字前后几行内容
- 备忘录模式——实现象棋悔棋
热门文章
- PouchDB 基础
- [RMQ] [线段树] POJ 3368 Frequent Values
- 最近要使用User Interface Process Application Block for .NET(微软net开发架构)
- GARFIELD@02-21-2005
- Linux安装redis(6.0.9)环境
- python 简单的接口测试框架
- ABAP中的枚举对象
- python练习册 每天一个小程序 第0010题
- Qt5 程序启动画面图片效果
- Android之Adapter用法总结-(转)