首页 > 其他分享 >压缩空间尝试使用只与前一个状态有关的dp dp[2][N]

压缩空间尝试使用只与前一个状态有关的dp dp[2][N]

时间:2022-08-19 01:11:11浏览次数:62  
标签:尝试 状态 int 压缩 世界 滚动式 ans dp

之后每次迭代t^1 使得 0->1 1->0

这里有 n个世界,每个世界都有 m 个点。

在i个世界中,你最多可以选择一条边 ,从 u点 移动到 v点 (可以选择不移动)。随后进入到第 i+1 个世界中的点 。如果选择在 u 点上不移动,则进入到第 i+1 个世界的u点 。
找到一段连续的世界 ,使得可以从点 1到点m 。最小化 r-l+1 (区间长度)
dp[i][j]表示在i个世界(i是滚动式呈现)到达点j,路过的最小世界数

#include<bits/stdc++.h>

using namespace std;

const int N = 1e4 + 10, INF = 0x3f3f3f3f;

int dp[2][N];  //因为第i个状态只取决第i-1状态,所以第一维可以用滚动数组承接上一个状态 
int n, m;
int ans = INF;

int main()
{
	cin>>n>>m;
	for(int i = 2; i <= m; i ++ ) dp[0][i] = dp[1][i] = n + 1;  //初始化 
	
	for(int i = 1, t = 1; i <= n; i ++ , t ^= 1){
		//f[1][2]=min(f[0][2]+1, n+1)
		//第一部相当于从f[0][2]状态转移而来,所以会承接0 
		int cnt;
		cin>>cnt;
		for(int u =2; u <= m; u ++ ) dp[t][u] = min(dp[t^1][u] + 1, n + 1);  //更新最短步数是不是由上一个世界相同的点i转移来的 
		for(int j = 1; j <= cnt; j ++ ){
			int u, v;
			cin>>u>>v;
			dp[t][v] = min(dp[t][v], dp[t ^ 1][u] + 1);  //f[t^1][u]+1表示上一个世界到达u点的代价
		}
		ans = min(ans, dp[t][m]);  //第二维表示点,第一维用于滚动式记录世界
	}
	if(ans > n) ans = -1;
	cout<<ans<<endl;
	return 0;
} 

标签:尝试,状态,int,压缩,世界,滚动式,ans,dp
From: https://www.cnblogs.com/liang302/p/16600656.html

相关文章

  • 扑克牌(期望DP)
    题意Rainbow把一副扑克牌(\(54\)张)随机洗开,倒扣着放成一摞。然后Admin从上往下依次翻开每张牌,每翻开一张黑桃、红桃、梅花或者方块,就把它放到对应花色的堆里去。Rainb......
  • 【DP 记录】AcWing 734. 能量石
    传送门给你几个物品,每种选一次,求最大价值,首先想到01背包,但是我们遇到了一个问题:普通的01背包在选择物品时是不讲求顺序的,但在这道题中,物品的选择是有顺序的(即对最优......
  • 基础知识与解压缩命令
    目录结构白色:表示普通文件蓝色:表示目录绿色:表示可执行文件红色:表示压缩文件浅蓝色:链接文件红色闪烁:表示链接的文件有问题黄色:表示设备文件灰色:表示其它文件打......
  • 将指定目录压缩为zip
    packagecom.phm.common.util;importjava.io.*;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;/***ZipUtils**@authorshuai*@date2021/7......
  • 一种关于低代码平台(LCDP)建设实践与设计思路
    简介: 作者在负责菜鸟商业中心CRM系统开发过程中发现有一个痛点:业务线很多,每个业务线对同一个页面都有个性化布局和不同的字段需求,而他所在的团队就3个人,那么在资源有限的......
  • 前端下载的方式总结(url,文件流,压缩包)
    1.比较常见的是通过a标签的href属性直接访问文件url地址。(1)constdownloadUrl=(url:string,file_name?:string)=>{if(url){url=url.replace(/^http/......
  • 区间DP の 题(内含 最长回文串,石子合并,删除字符串,乘积最大,释放囚犯)
    乘积最大  由于题目给定的是m,需要分解成m+1部分的乘积,不难想到乘号刚好是m个,那么该题就转化成了m个乘号的插入方式。  最优子结构分析:    设数字字符串为a1a......
  • [题解] HDU 5115 Dire Wolf 区间DP
    考虑先枚举所有的物品中最后拿走的,这样就分成了2个子问题,即先拿完左边的,再拿完右边的,最后拿选出的那个。令dp(i,j)表示拿完[i,j]所有物品的最小代价。你可能会说,我们拿[i,j......
  • 计数类组合数DP(玩个球)A3
    n种颜色的球,每种m个,给出一个这些球的排列,就会从左往右把第一个遇到的某种颜色涂白。问有多少不一样的颜色序列(n,m<=2000)发现白色的球都一样,当成一种算,我们只关注当前:(1)白......
  • Chiitoitsu(概率DP)
    代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>usingnamespacestd;typedeflonglongll;constintN=1......