题解 P1854 花店橱窗布置
把二维压成一维的DP了解一下。。。
(以纪念神经兮兮调了两天的一维DP(刷水题谋财害命)以及感谢学长的帮助@ydnhaha)
显然我们有二维的dp:f[i][j]代表第i盆花放到第j个位置
for(R i=;i<=n;i++)
for(R j=V-(n-i);j>=i;j--)
for(R k=j-;k>=i-;k--)
if(f[i][j]<f[i-][k]+w[i][j])
ans[i][j]=k,f[i][j]=f[i-][k]+w[i][j];
由于只访问上一个状态,我们可以理所应当的把它压掉
注意,需要倒序循环(好吧我的二维的也是倒序的QWQ)
for(R i=;i<=n;i++) for(R j=V-(n-i);j>=i;j--) {
f[j]=0xcfcfcfcf;
for(R k=j-;k>=i-;k--) if(f[j]<f[k]+w[i][j]) ans[i][j]=k,f[j]=f[k]+w[i][j];
}
时间复杂度不变但是空间小了一些?
AC代码
二维的:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define R register int
using namespace std;
int n,V,pos=;
int w[][],f[][],ans[][]; inline void print(int i,int j) {
if(!i) return ;
print(i-,ans[i][j]);
printf("%d ",j);
} signed main() {
//freopen("testdata.in","r",stdin);
memset(f,0xcf,sizeof(f));
scanf("%d%d",&n,&V);f[n][]=0xcfcfcfcf;
for(R i=;i<=n;i++) for(R j=;j<=V;j++) scanf("%d",&w[i][j]);
for(R i=;i<=V;i++) f[][i]=;
for(R i=;i<=n;i++) for(R j=V-(n-i);j>=i;j--)
for(R k=j-;k>=i-;k--) if(f[i][j]<f[i-][k]+w[i][j]) ans[i][j]=k,f[i][j]=f[i-][k]+w[i][j];//,cout<<i<<" "<<j<<" "<<k<<" "<<f[1][1]<<endl;
for(R i=V;i>=n;i--) if(f[n][i]>f[n][pos]) pos=i;
printf("%d\n",f[n][pos]),print(n,pos);
}
一维的:
(其实一维的有点像01背包对吧)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define R register int
using namespace std;
int n,V,pos=;
int w[][],f[],ans[][]; inline void print(int i,int j) {
if(!i) return ;
print(i-,ans[i][j]);
printf("%d ",j);
} signed main() {
//freopen("testdata.in","r",stdin);
//memset(f,0xcf,sizeof(f));
scanf("%d%d",&n,&V);f[]=0xcfcfcfcf;
for(R i=;i<=n;i++) for(R j=;j<=V;j++) scanf("%d",&w[i][j]);
//for(R i=0;i<=V;i++) f[0][i]=0;
for(R i=;i<=n;i++) for(R j=V-(n-i);j>=i;j--) {
f[j]=0xcfcfcfcf;
for(R k=j-;k>=i-;k--) if(f[j]<f[k]+w[i][j]) ans[i][j]=k,f[j]=f[k]+w[i][j];//,cout<<i<<" "<<j<<" "<<k<<" "<<f[1][1]<<endl;
}
for(R i=V;i>=n;i--) if(f[i]>f[pos]) pos=i;
printf("%d\n",f[pos]),print(n,pos);
}
2019.3.3
题解 P1854 花店橱窗布置的更多相关文章
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- 洛谷 P1854 花店橱窗布置 题解
Analysis 给定一个f*v的矩阵 要求从第一行走到第f行,每行取走一个数, 且该行所取的数必须必上一行所取的数的列数大 , 求所能取走的最大值 注意每一行所取走的数字的列数必须大于等该行的行号 ...
- 洛谷 P1854 花店橱窗布置 【dp】
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- 洛谷 P1854 花店橱窗布置
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- [动态规划]P1854 花店橱窗布置
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- luogu P1854 花店橱窗布置
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- 【Luogu】P1854花店橱窗布置(DP)
照例良心题目链接 此题使用f[i][j]表示前i束花放进前j个花瓶的时候的最大值.转移方程如下 f[i][j]=max(f[i][j-1],f[i-1][j-1]+que[i][j]) 其中que[i ...
- 洛谷P1854 花店橱窗布置
题目 DP,直接递推比记忆化搜索简单. 定义状态\(dp[i][j]\)为前i行最后一个选择第i行第j个数所得到最大值. 易得状态转移方程 \(dp[i][j]=max(dp[i-1][k]+a[i] ...
- [IOI1999]花店橱窗布置(DP路径记录)
题目:[IOI1999]花店橱窗布置 问题编号:496 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V ...
随机推荐
- Java_泛型_01_T与?
二.参考文档 1.JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
- storm相关技术
There are two kinds of nodes on a Storm cluster: the master node and the worker nodes. 有两种节点,主节点和wor ...
- 详解使用python crontab设置linux定时任务
熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用 ...
- jdk安装图解--windows系统(第一次安装和第二次安装区别)
第一次安装可参考 https://jingyan.baidu.com/article/22fe7cedc9b93e3003617f64.html 第二次安装,如已经配置好环境变量,cmd下执行java ...
- 基于bootsplash的嵌入式linux启动画面定制
来源: ChinaUnix博客 作者: ChinaUnix博客 发布时间:2007-01-01 16:29:00 摘 要:在基于linux的嵌入式仿真平台研发中,利用开源工具bootsplash能够定 ...
- dataguard 常规运维操作
1.standby database 正常的打开与关闭 1.1 针对 physical standby打开:--打开数据库SQL>startup; -- 开启 mgr 进程 SQL>ALT ...
- bzoj 4671 异或图 —— 容斥+斯特林反演+线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 首先,考虑容斥,就是设 \( t[i] \) 表示至少有 \( i \) 个连通块的方 ...
- HBase键值分片的简单运用
1.基本原理介绍 HBase的存储是通过行键建立索引进行存储的,而且HBase只支持一级索引,因此只要通过行键才能很快的找到需要的数据. HBase是一个分布式的系统,HBase通过行 ...
- python+ mysql存储二进制流的方式
很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想 ...
- Ubuntu vim使用
vim安装:apt-get install vim-gtk vim使用:默认启动插入模式,或者按‘I’进入插入模式,退出插入模式按‘esc’,用冒号‘:wq’进行保存退出: 其复制和粘贴是靠鼠标右键中 ...