T了一个点求助……

P1171 售货员的难题

这是我的代码@[zxysxy](/space/show?uid=132235) ``` #include<bits/stdc++.h> using namespace std; int n,k=2147483647; struct wc { int aa,kk; }; struct sb { wc zz[21]; }; sb a[21]; int cc[21]; bool b[21]; bool cmp(wc wc1,wc wc2) { return wc1.aa<wc2.aa; } void dfs(int l,int s,int z) { if(s+n-l+1>=k)return; if(l==n-1){k=min(k,s+cc[z]);return;} for(int i=1;i<=n;i++) { if(s+a[z].zz[i].aa>=k)return; if(!b[a[z].zz[i].kk]) { b[a[z].zz[i].kk]=1; dfs(l+1,s+a[z].zz[i].aa,a[z].zz[i].kk); b[a[z].zz[i].kk]=0; } } } int main() { int i,j; scanf("%d",&n); for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%d",&a[i].zz[j].aa);a[i].zz[j].kk=j;}cc[i]=a[i].zz[1].aa;sort(a[i].zz+1,a[i].zz+n+1,cmp);} b[1]=1; dfs(0,0,1); printf("%d",k); } ```
by pzc2004 @ 2019-04-10 21:06:56


|