Forever Young

洛谷 P1515 旅行

洛谷 P1515 旅行

思路

一道超级简单的入门搜索题!随便做都可以过的那种(反正我是乱做的。。)

先用一个数组把之前就有的旅馆存下来,然后输入新旅馆的时候从第\(15\)个开始输入,之后对旅馆的位置排一下序,直接暴力搜索就行了

具体的可以看注释

代码

//知识点:搜索
/*
By:Loceaner
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

inline int read() { //快读(不会的话无视掉,输入的时候直接用scanf就好了)
	char c = getchar();
	int x = 0, f = 1;
	for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;
	for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
	return x * f;
}

const int N = 50;

int a, b, n, w[N] = {0, 990, 1010, 1970, 2030, 2940, 3060, 3930, 4060, 4970, 5030, 5990, 6010, 7000}, vis[N], ans = 0; //用w数组存每个旅馆的位置

void dfs(int now, int cnt) {
	if(now >= 7000) {//只要目前的位置大于了7000,直接让方案数加一并返回
		ans++;
		return;
	}
	for(int i = 1; i <= n + 15; i++) {
		if(!vis[i]) {
			if(w[i] - now >= a && w[i] - now <= b) {
				vis[i] = 1;//如果满足条件就将vis数组设为1
				dfs(w[i], cnt + 1);//更新参数,继续搜索 
				vis[i] = 0;//搜索完之后回溯
			}
		}
	}
}

int main() {
	a = read(), b = read(), n = read();
	for(int i = 15; i < n + 15; i++) w[i] = read();
	stable_sort(w, w + n + 15);//从小到大排序
	vis[0] = 1;
	dfs(0, 0);
	cout << ans << '\n';
	return 0;
}
posted @ 2019-10-17 09:22  Loceaner  阅读(177)  评论(0编辑  收藏  举报