L. Link with Level Editor I dp

news/2024/6/1 19:15:31 标签: 算法, 动态规划, c++

L
dp

题意

n n n 个世界,每个世界是一张简单有向图。从这些世界中选择一个子段进行游戏,规则为从 1 1 1 出发,每个世界可以原地不动或经过一条边,到达点 m m m 即为胜利。
要求选出一个尽可能短的子段,使得存在至少一种方案可以胜利。

思路

d p [ i ] [ j ] dp[i][j] dp[i][j] 表示到第 i i i 个世界中的 j j j 点最少需要经过多少个世界。答案即为 d p [ n ] [ m ] dp[n][m] dp[n][m]

考虑如何在第 i i i 个世界中到达 v v v ,只有如下两种转移方式:

  1. 通过 u , v u,v u,v 从第 i − 1 i-1 i1个世界中的 u u u 到达 v v v d p [ i ] [ v ] = d p [ i − 1 ] [ u ] + 1 dp[i][v]=dp[i-1][u]+1 dp[i][v]=dp[i1][u]+1
  2. 不动,从第 i − 1 i-1 i1 个世界中的 v v v 到达 v v v d p [ i ] [ v ] = d p [ i − 1 ] [ v ] + 1 dp[i][v]=dp[i-1][v]+1 dp[i][v]=dp[i1][v]+1

所以只需要依次对每个世界枚举所有边,用滚动数组优化即可。注意起点必须是1。

代码

int n, m;
int dp[2][maxm];	//dp[i][j] 表示到第i个世界的第j个点最少要经过多少个世界
void solve() {
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
    	dp[0][i] = dp[1][i] = INF;
    }
    int ans = INF;
    int p = 0;
    for(int i = 1; i <= n; i++) {
    	int e;
    	cin >> e;
    	p ^= 1;
    	for(int j = 1; j <= m; j++) {
    		dp[p][j] = dp[p^1][j] + 1;
    	}
    	for(int j = 1; j <= e; j++) {
    		int u, v;
    		cin >> u >> v;
    		if(u == 1) {
    			dp[p][v] = 1;
    		}
    		else {
    			chmin(dp[p][v], dp[p^1][u] + 1);
    		}
    	}
    	chmin(ans, dp[p][m]);
    }
    if(ans == INF) {
    	cout << -1 << endl;
    }
    else {
    	cout << ans << endl;
    }
}

http://www.niftyadmin.cn/n/1764766.html

相关文章

UVA 10900 So you want to be a 2n-aire? 2元富翁 (数学期望,贪心)

题意&#xff1a;你一开始有1元钱&#xff0c;接下来又n<30个问题&#xff0c;只需答对1个问题手上的钱就翻倍&#xff0c;最多答对n个&#xff0c;得到的钱是2n。而每个问题答对的概率是[t,1]之间平均分布&#xff0c;那么问最优情况下得到奖金的期望值是多大&#xff1f; …

Rust初步(六):在C#中使用Rust组件

上一篇文章&#xff0c;我们通过实例比较了一下C#和Rust的性能表现&#xff0c;应该说在Release模式下面&#xff0c;Rust进行计算密集型的运算还是有些比较明显的优势的。那么&#xff0c;我们有没有可能&#xff0c;在C#中做一些快速应用开发&#xff0c;而一些核心的算法用R…

H. Take the Elevator 贪心

H 贪心 题意 贴的题解中的题意&#xff0c;这里其实写错了&#xff0c;楼高 kkk, 载客量限制为 mmm 。 思路 因为下降的过程中间不能转换方向&#xff0c;而上行的人肯定乘坐上行时的电梯&#xff0c;下行的人一定乘坐下行时的电梯&#xff08;废话&#xff09;&#xff0c;…

杭电多校3 1012. Two Permutations dp*

1012 dp 题意 给出长度为 nnn 的全排列 p,qp,qp,q&#xff0c;还有一个由 p,qp,qp,q 组成的长度为 2n2\times n2n 的序列 SSS 。 现在有一个空序列 RRR &#xff0c;每次可以从 ppp 或 qqq 的开头取出一个数字并加到 RRR 的末尾&#xff0c;问有多少种取法使得 RSR SRS 。 …

apache自带压力测试工具ab详解

来源&#xff1a;http://www.ha97.com/4617.html PS&#xff1a;网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache中有个自带的&#xff0c;名为ab的程序&#xff0c;可以对Apache或其它类型的服务器进…

1391D. 505 状压dp

D 状压dp&#xff0c; 2000 题意 给出一个 nm(n≤m)n\times m(n\leq m)nm(n≤m) 的010101矩阵&#xff0c;称任意一个边长为偶数的子正方形中1的个数为奇数的矩阵为好矩阵&#xff0c;求至少改多少个数&#xff0c;可以使其变为好矩阵。如果无论多少次操作都无法变为好矩阵&a…

MySQL(10):实体、实体表和外键(foreign key)

1.实体 数据库管理系统中的各种用于数据管理方便而设定的各种数据管理对象&#xff0c;如&#xff1a;数据库表、视图、存储过程等都是数据库实体。广义上讲&#xff0c;这些对象中所存储的数据也是数据库实体。因为它们也是确切存在着的实体。 2.实体关系&#xff08;表设计&a…

牛客多校4 A.Task Computing 思维

A 题意 n(n≤1e5)n(n\leq 1e5)n(n≤1e5) 个物品&#xff0c;每个物品有 wi,piw_i, p_iwi​,pi​ &#xff0c;现从中取出 m(m≤20)m(m\leq 20)m(m≤20) 件&#xff0c;最大化 思路 这种题一般都是通过比较交换相邻两项后对答案的贡献&#xff0c;得出一种排序方法&#xff…