• 洛谷 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 << '
    ';
    	return 0;
    }
    
  • 相关阅读:
    java基础 Collections.sort的两种用法
    Mysql常用命令详解
    2、Java并发编程:如何创建线程
    JAR、WAR、EAR的使用和区别
    区分Oracle的数据库,实例,服务名,SID
    Mysql 启动运行
    3、Java并发编程:Thread类的使用
    1、Java多线程基础:进程和线程之由来
    文件上传利器SWFUpload使用指南
    网络矩阵
  • 原文地址:https://www.cnblogs.com/loceaner/p/11690023.html
Copyright © 2020-2023  润新知