能有人发发善心发个搜索的题解么?

P1171 售货员的难题

这题不是图论吗……
by 1jia1 @ 2016-09-27 21:16:37


@[chenleyu](/space/show?uid=14381) 可是本题标签是搜索啊。。。
by zclzslz @ 2016-09-27 21:21:35


哦,那发个递推吧
by 1jia1 @ 2016-09-27 21:24:09


```cpp #include <iostream> #include <cstdio> #include <cstring> using namespace std; int ga[41][41]; int n, i, j; int minv, m; bool visited[41]; void init() { cin >> n; for (i=1; i<=n; i++) for (j=1; j<=n; j++) cin >> ga[i][j]; memset(visited, false, sizeof(visited)); minv = 99999999; m = 0; } void search(int step, int cur_node) { int i, j, k; if (step == n) { if (m + ga[cur_node][1] < minv) minv = m + ga[cur_node][1]; } else for (i=2; i<=n; i++) { if (i!=cur_node && !visited[i]) { m += ga[cur_node][i]; visited[cur_node] = true; if (m < minv)search(step+1,i); m = m - ga[cur_node][i]; visited[cur_node] = false; } } } void print() { cout << minv<<endl; fclose(stdout); } int main() { init(); search(1,1); print(); return 0; } ```
by 玉环妹妹 @ 2017-01-25 14:37:42


80分 #9,#10超时
by 玉环妹妹 @ 2017-01-25 14:38:13


```cpp #include<bits/stdc++.h> using namespace std; const int maxn=20+10,INF=1000000000; int List[maxn][maxn],p[maxn],a[maxn][maxn],n,ans=INF,sum,mins=INF; void dfs(int q,int sum,int x){ if(q==n&&a[x][1]){ ans=min(ans,sum+a[x][1]); return; } for(int i=1;i<=n;i++){ int k=List[x][i]; if(!p[k]){ if(sum+a[x][k]>=ans)return; if(sum+n-q+mins+a[x][k]>=ans)return; p[k]++; dfs(q+1,sum+a[x][k],k); p[k]--; } } } int main(){ int m,i,j,k,x,y,z; freopen("Seller.in","r",stdin); freopen("Seller.out","w",stdout); scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++){ scanf("%d",&a[i][j]); } for(i=1;i<=n;i++) for(j=1;j<=n;j++) List[i][j]=j; for(k=1;k<=n;k++) for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if(a[k][List[k][i]]>a[k][List[k][j]]){ int tmp=List[k][i]; List[k][i]=List[k][j]; List[k][j]=tmp; } for(i=2;i<=n;i++) mins=min(mins,a[i][1]); p[1]=1; dfs(1,0,1); printf("%d",ans); return 0; } ```
by as2393125 @ 2017-08-10 20:21:01


|