把二维压成一维的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 花店橱窗布置的更多相关文章

  1. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  2. 洛谷 P1854 花店橱窗布置 题解

    Analysis 给定一个f*v的矩阵 要求从第一行走到第f行,每行取走一个数, 且该行所取的数必须必上一行所取的数的列数大 , 求所能取走的最大值 注意每一行所取走的数字的列数必须大于等该行的行号 ...

  3. 洛谷 P1854 花店橱窗布置 【dp】

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  4. 洛谷 P1854 花店橱窗布置

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  5. [动态规划]P1854 花店橱窗布置

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  6. luogu P1854 花店橱窗布置

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  7. 【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 ...

  8. 洛谷P1854 花店橱窗布置

    题目 DP,直接递推比记忆化搜索简单. 定义状态\(dp[i][j]\)为前i行最后一个选择第i行第j个数所得到最大值. 易得状态转移方程 \(dp[i][j]=max(dp[i-1][k]+a[i] ...

  9. [IOI1999]花店橱窗布置(DP路径记录)

    题目:[IOI1999]花店橱窗布置 问题编号:496 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V ...

随机推荐

  1. smokeping高级配置

    摘自: http://mayulin.blog.51cto.com/1628315/514367 自定义报警 http://www.cnblogs.com/thatsit/p/6395506.html

  2. laravel基础课程---4、Laravel基础网站结构搭建

    laravel基础课程---4.Laravel基础网站结构搭建 一.总结 一句话总结: 1.搭建网站前后台路由:在路由组Route::group()中设置好命名空间和前缀 2.搭建控制器:比如1)新建 ...

  3. Windows内存性能分析(二)性能瓶颈

    内存瓶颈: 由于可用内存缺乏导致系统性能下降的现像. (一).相关的性能对象 主要考虑内存的页面操作和磁盘的I/O操作,需要考虑如下性能对象: Memory性能对象: 用于分析整个系统的内存瓶颈问题. ...

  4. Java_HTTP_01_HttpClient

    一. 二.参考文档 1. HttpClient官方文档 HttpClient官方文档中文翻译 1.HttpClient 4 实现文件下载 2.httpclient 上传文件.下载文件 3.httpcl ...

  5. haproxy透传用户ip-方法和原理

    为了透传用户ip到后端server, proxy机器需要解决两个问题: 1.在创建到后端server的套接字时, 将用户ip作为套接字的源ip,从而让后端server看到: 2.后端server在回包 ...

  6. Mac使用记录

    ---恢复内容开始--- brew list //查看brew安装东东 ls //当前目录下内容 brew --cache //查看brew下载目录 /usr/local/Cellar/ //隐藏文件 ...

  7. PHP留言小练习

    实现功能: 留言.搜索.编辑.删除.详情页.时间.点击量 页面划分: index.html(留言列表页) add.html(留言页) edit.php(编辑页) del.php(删除页) view.p ...

  8. AtCoder AGC #4 Virtual Participation

    我好懒啊QAQ 老规矩 从C开始 C.给一个矩阵,里面有一些紫色方块,你需要涂两个矩阵,一个红色,一个蓝色,保证你涂的颜色四连通 然后把红色蓝色矩阵叠起来要求紫色的地方必须是紫色,其他地方不能是紫色 ...

  9. 损失函数(Loss function) 和 代价函数(Cost function)

    1损失函数和代价函数的区别: 损失函数(Loss function):指单个训练样本进行预测的结果与实际结果的误差. 代价函数(Cost function):整个训练集,所有样本误差总和(所有损失函数 ...

  10. CodeForces - 434D Nanami's Power Plant

    Codeforces - 434D 题目大意: 给定一个长为n的序列,序列中的第i为上的值\(x_i\),序列第i位上的值\(x_i\in[l_i,r_i]\),价值为\(f_i(x_i)\),其中\ ...