1. 程式人生 > >p1177 搜索簡單題

p1177 搜索簡單題

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     if
(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 }
p1177

  然後之所以遲遲不行的原因其實是我習慣把循環變量弄成全局的。而在這道題中,dfs內部的變量是不能被自己的下層變來變去的。然後就只能過一些個特殊情況。

  還有一個小小的害怕:如果出題人給了個所有工作時間都一樣的數據豈不是要爆炸,即使優化if(sum>=ans)return ;後復雜度還是n的n次方,簡直了。技術分享圖片

p1177 搜索簡單題