散步:
题目描述:
将一条路划分为N-1个等距的部分,你可以把这条路当成一个数轴,道路中的极点标记为1-N,起点只可能是这N点中的一个。
走路的人还提供了一个重要信息,他没隔一段时间就会用手机看一下自己走了多远,记做D,但是他并不记得是朝哪个方向走的,唯一可以确定的是,在两次看手机的间隔中他不会改变方向,每次看完手机后他可能继续向前或者回头走。
问题是,已知他在散步过程中始终在1~N的范围内,那么符合上述条件的起点可能有多少个?
输入描述:
第一行包含一个正整数N,M,N表示道路的宽度,也是数轴上点的数量,M是小A提供的D的数量。(N,M<=20000),接下来有M行,每行一个正整数D,表示小A朝着某个方向走了D个单位。(D<=20000)
输出描述:
输出仅包含一个整数,表示可能的起点的个数。
示例1:
输入:
10 3
5
2
6
输出:
8
代码不太对,由时间再思考改正一下
代码:
import java.util.Scanner;
public class Main {
static int out=0;
static int inito=0;
static int sp=0;
static int flag=0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int len=in.nextInt();
int n=in.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++) {
a[i]=in.nextInt();
}
for(int i=0;i<len;i++) {
sp=0;
flag=0;
dfs(0,i,len,a);
if(flag==1) {
out++;
}
}
System.out.println(out);
}
}
public static void dfs(int x,int step,int alen,int[] aa) {
int arrn=aa.length;
if(arrn==x) {
flag=1;
return;
}
if(step+aa[x]<alen) {
dfs(x+1,step+aa[x],alen,aa);
}
if(step-aa[x]>=0) {
dfs(x+1,step-aa[x],alen,aa);
}
}
}
3601