把二维压成一维的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. zabbix监控系统性能采集指标

                  监控项目                        详细内容                                                       ...

  2. hdu-4417 Super Mario(树状数组 + 划分树)

    题目链接: Super Mario Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Other ...

  3. Multiple webcams on ZoneMinder

    Monitoring a 3D Printer I have tidied my new workshop and I am starting to play with 3d-printing aga ...

  4. Asp.Net 无法获取IIS拾取目录的解决办法[译]

    Asp.Net 无法获取IIS拾取目录的解决办法 作者:Jason Doucette  [MCP] 翻译:彭远志 原文地址:Fixing the cannot get IIS pickup direc ...

  5. 用Entity Framework 来创建MySql数据库和表结构

    1. 创建VS工程 2.添加新项, 选中ADO.Net Entity Data Model模板 3.填入Host及数据库名字, 如果没有此数据库, 会提示创建 4.添加edmx后, 右击选择属性,配置 ...

  6. MFS安装配置使用

    MFS server:192.168.209.18groupadd mfsuseradd -g mfs mfscd /usr/srctar xzvf mfs-1.6.27-5.tar.gzcd mfs ...

  7. hadoop之一:概念和整体架构

    什么是hadoop? Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.Hadoop是根据Go ...

  8. 转载:数据库应用开发工具Toad使用笔记

    由于网上TOAD中文教程很少,在网上摘抄了此文章便于学习,感谢原创者. TOAD使用笔记 1.把鼠标停在sql所在行,然后ctrl+Enter直接执行当前sql. 2.解决Toad对中文显示乱码问题( ...

  9. Exception in thread "main" java.lang.NoClassDefFoundError: antlr/ANTLRException 解决方法

    转自:https://blog.csdn.net/gengkunpeng/article/details/6225286?utm_source=blogxgwz4 1. struts2.3.15 hi ...

  10. mogilefs分布式文件存储

    MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.MogileFS.Perlbal ...