AtCoder 183 C
https://atcoder.jp/contests/abc183/tasks/abc183_c
题目大意:
有n个城市,从第i个城市到第j个城市,所需的时间是T[i][j]。你现在要从第一个城市出发,遍历所有城市,并最后回到第一个城市。问在这所有路径中,所需的时间总和正好等于k的有几条?
n最大是8,问题不大。
解法1:全排列
分析样例1,我们就能发现:头尾两个1肯定是雷打不动的,只是中间的2 3 4在全排列。我们可以用next_permutation()函数全排列,暴力算出时间总和。
#include <bits/stdc++.h>
using namespace std;
int t[10][10],a[12];
int n,k,ans;
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>t[i][j];
for(int i=1;i<=n;i++) a[i]=i;
do{
int sum=0;
for(int i=2;i<=n;i++)
{
sum+=t[a[i-1]][a[i]];
}
sum+=t[a[n]][1];
if(sum