zoukankan      html  css  js  c++  java
  • 洛谷 P1690 贪婪的Copy

    题目

    本题难度较低,操作比较简单,首先对于范围较小的N(<=100),我们可以先跑一遍floyd,求出任意两点之间的最短路。对于很小的p(<=15),我们可以直接考虑全排列,运用到next_permutation(, )函数即可快速解决此题

    Code:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    //Mystery_Sky
    //
    #define maxn 300
    #define INF 0x3f3f3f3f
    int point[maxn];
    int road[maxn][maxn];
    int vis[maxn];
    int ans = INF, sum;
    int n, w, a, p;
    void dfs(int step, int dis, int get)
    {	
        vis[step] = 1;
        if(get == p && step == n) {
            ans = min(dis, ans);
            return;
        }
        
        for(int i = 1; i <= n; i++) {
            if(i == step) continue;
            if(!vis[i] && point[i]) {
                dis += road[step][i];
                vis[i] = 1;	
                dfs(i, dis, get+1);
                vis[i] = 0;
                dis -= road[step][i];		
            }
    
            
        }
    }
    
    int main() {
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= n; j++) {
                scanf("%d", &w);
                road[i][j] = w;
            }
        }
        for(int k = 1; k <= n; k++) {
            for(int i = 1; i <= n; i++) {
                for(int j = 1; j <= n; j++) {
                    road[i][j] = min(road[i][j], road[i][k] + road[k][j]);
                }
            }
        }
        scanf("%d", &p);
        for(int i = 1; i <= p; i++)	scanf("%d", &point[i]);
        sort(point+1, point+1+p);
        do {
        	sum = road[1][point[1]];
        	for(int i = 2; i <= p; i++) {
        		sum += road[point[i-1]][point[i]];
    		}
    		sum += road[point[p]][n];
    		ans = min(ans, sum);
    	} while(next_permutation(point+1, point+p+1));//p!枚举全排列即可
        printf("%d
    ", ans);
        return 0;
    }
    
    
    唯愿,青春不辜负梦想,未来星辰闪耀
  • 相关阅读:
    【欧拉质数筛选法 模版】
    【归并排序 逆序对 模版】
    【 lca倍增模板】
    【LSGDOJ 1333】任务安排 dp
    【NOIP2013】火柴排队
    【USACO Feb 2014】Cow Decathlon
    【USACO08NOV】奶牛混合起来Mixed Up Cows
    【LSGDOJ 1351】关灯
    【USACO】干草金字塔
    【USACO】电子游戏 有条件的背包
  • 原文地址:https://www.cnblogs.com/Benjamin-cpp/p/10486041.html
Copyright © 2011-2022 走看看