首页 > 其他分享 >P1135题解

P1135题解

时间:2023-11-24 22:56:31浏览次数:33  
标签:le 205 个点 int 题解 P1135

思路

我写的好像是动规的做法。

设 \(f_{i,j}\) 表示第 \(i\) 步 \(j\) 个点是否可以走到,值要么为 \(1\),要么为 \(0\)。最多走 \(n\) 步,因为总共只有 \(n\) 个点,每一步都肯定会多延伸出一个点,要不然就重复计算。

不难得出转移公式:

\(f_{i+1,j+k_j}=f_{i,j}\)
\(f_{i+1,j-k_j}= f_{i,j}\)

解释一下,因为只能从后往前,不然如果从当前往上一步就有需要一层循环。

注意:

  • 第一个转移执行前提是 \(j+k_j \le n\)。
  • 第二个转移执行前提是 $1 \le j- k_j $,如果不判断就会数组越界。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int f[205][205],n,a,b,k[205]; 
int main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++)cin>>k[i];
	f[0][a]=1;
	for(int i=0;i<n;i++){
		for(int j=1;j<=n;j++){
			if(f[i][j]==0)continue;
			if(j+k[j]<=n){f[i+1][j+k[j]]=f[i][j];}
			if(j-k[j]>=1)f[i+1][j-k[j]]=f[i][j];
		}
	}
	for(int i=0;i<=n;i++){
		if(f[i][b]){
			cout<<i;
			return 0;
		}
	}
	cout<<-1;
	return 0;
}

标签:le,205,个点,int,题解,P1135
From: https://www.cnblogs.com/xdh2012/p/17854965.html

相关文章

  • P1003题解
    简单模拟题。思路枚举每一个地毯,因为后面的会覆盖前面的,所以从正序枚举。如果要求的点的坐标在当前地毯上,则将答案赋值为当前地毯编号。最后输出答案。那如果这个点没有地毯呢?答案初始设为\(-1\),这样没有地毯覆盖的话,答案不会改变,这样输出答案就会是\(-1\)。注意:记得赋初......
  • SP9199题解
    考察了小学奥数知识,不会的请先去学习一下相遇与追及。思路两个人相遇的点一定是有周期性的,我们可以先算出一个周期会走多远,而这个距离是两人速度的最小公倍数。接着需分情况讨论。如果两人是同向,则为追及,需用距离除以一人的速度减去距离除以另一人的速度。需要取绝对值。......
  • P5163 WD与地图 题解
    来一发分治题解吧。感觉和单纯的整体二分还是有一点区别。虽然整体二分也能看作分治就是了。思路首先时光倒流。删边改为加边。这没有什么好说的,比较基础。我们考虑在不断加边时,每两个点是在什么时候变成一个强连通分量里面的。考虑分治。首先在\([l,r]\)内选取中点\(......
  • [ABC327D] Good Tuple Problem 题解
    分析:这一道题很容易发现可以用并查集来维护(不知道为什么其他人都用了图论),\(a_i\)与其对应的\(b_i\)代表着\(a_i\)这个集合里不能存在着\(b_i\)。根据只有存在两个集合,所以我们会发现,若\(x\)与\(y\)不在一个集合且\(x\)与\(z\)也不在一个集合,那么\(x\)和\(y\)......
  • [ABC328C] Consecutive 题解
    给一个长度为\(n\)的字符串\(s\),\(q\)次询问,每一次\(l\)和\(r\)区间内有多少个\(s_i\)等于\(s_{i-1}\)。\(10^5\)的数据\(O(N^2)\)暴力肯定行不通。于是我们考虑预处理前缀和,处理到\(i\)下标以及之前有多少个\(s_i\)等于\(s_{i-1}\)。每一次查询\(O(1)\)回......
  • [ABC328D] Take ABC 题解
    题目大意:给你一个字符串\(s\)。你要在其中找到多少个ABC的子串,例如AABCBC算两个,删掉中间的ABC后,前面的和后面的加起来也是一个ABC,所以就算两个。思路分析:首先很容易写出暴力,把一个ABC提取出来后把后面的元素往前移,然后再重复操作,但是我们发现时间复杂度会卡成\(O(n^......
  • [ABC329C] Count xxx 题解
    插曲因为本人看错了题面,买看到一个子串只包含一种字母,所以切完D和E才回来发现很简单。问题翻译给你一个长度为\(N\)的字符串\(S\),由小写英文字母组成。求\(S\)的非空子串中有多少个是一个字符的重复。在这里,作为字符串的两个子串是相等的,即使它们是以不同的方式得到......
  • [ABC329D] Election Quick Report 题解
    题目翻译有一场选举,要从\(N\)名候选人中选出一名获胜者,候选人编号为\(1,2,\ldots,N\),共有\(M\)张选票。每张选票正好投给一位候选人,其中\(i\)票投给了候选人\(A_i\)。选票将按照从第一张到最后一张的顺序进行统计,每张选票统计完毕后,将更新并显示当前的获胜者。得票......
  • AT_abc329_e [ABC329E] Stamp 题解
    题目翻译给你两个字符串:\(S\)由大写英文字母组成,长度为\(N\);\(T\)也由大写英文字母组成,长度为\(M\),小于\(N\)。有一个长度为\(N\)的字符串\(X\),它只由#字符组成。请判断是否有可能通过执行以下任意次数的操作使\(X\)与\(S\)匹配:在\(X\)中选择\(M\)个连续字符,并......
  • 以精确反馈促进学生编程逻辑和问题解决意识:一种基于两层测试的在线编程训练方法
    (PromotingStudents’ProgrammingLogicandProblem-SolvingAwarenessWithPrecisionFeedback:ATwo-TierTest-BasedOnlineProgrammingTrainingApproach)DOI:10.1177/07356331221087773一、摘要研究目的:培养学生的计算机编程技能已成为全球重要的教育问题。然而,学......