算法题17

散步:
题目描述
将一条路划分为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

发布了80 篇原创文章 · 获赞 1 · 访问量 1436

猜你喜欢

转载自blog.csdn.net/alidingding/article/details/104150445