p1177 搜索簡單題
阿新 • • 發佈:2018-05-02
flag PE one 特殊情況 CI pan spa closed OS
真的是挺簡單的,按照要求直接搜。雖然我不知道到底是橫行表示工作還是豎列,但是搜起來還是一樣的。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 int i,f,n,o[30][30],ans=200000; 8 bool flag[30]; 9 void dfs(int sum,int now) 10 { 11 ifp1177(sum>=ans) return ; 12 if(now==n) 13 { 14 ans=sum; 15 return ; 16 } 17 now++; 18 for(int j=1;j<=n;j++) 19 { 20 if(flag[j]==0) 21 { 22 flag[j]=1; 23 dfs(sum+o[j][now],now); 24 flag[j]=0; 25 } 26 }27 return; 28 } 29 int main() 30 { 31 ios::sync_with_stdio(false); 32 cin>>n; 33 for(i=1;i<=n;i++) 34 for(f=1;f<=n;f++) 35 cin>>o[i][f]; 36 for(i=1;i<=n;i++) 37 { 38 flag[i]=1; 39 dfs(o[i][1],1); 40 flag[i]=0; 41 }42 cout<<ans; 43 }
然後之所以遲遲不行的原因其實是我習慣把循環變量弄成全局的。而在這道題中,dfs內部的變量是不能被自己的下層變來變去的。然後就只能過一些個特殊情況。
還有一個小小的害怕:如果出題人給了個所有工作時間都一樣的數據豈不是要爆炸,即使優化if(sum>=ans)return ;後復雜度還是n的n次方,簡直了。
p1177 搜索簡單題