CodeForce-812B Sagheer, the Hausmeister(DFS)
阿新 • • 發佈:2017-07-01
節約用電 可以關閉 div container 決定 class style dfs tar
Sagheer, the Hausmeister
CodeForces - 812B
題意:有一棟樓房,裏面有很多盞燈沒關,為了節約用電小L決定把這些燈都關了。
這樓有 n 層,最左邊和最右邊有樓梯。每一層有 m 個房間排成一排。這棟樓可以被表示成一個 n 行 m?+?2 列的矩陣,其中每行第一個和最後一個格點表示樓梯, 剩余 m 個格點表示房間。
現在小L在最底層的最左邊樓梯,他想要關掉所有的燈。他每次可以走到相鄰的房間,如果在樓梯口可以上下樓梯。他打算關掉所有開著的燈,在他沒有將一層的所有燈都關閉前他不會上樓。現在求他最少需要走多少步可以關閉所有燈。
註意小L不需要返回原處,最終可以停留在任意一個地方。
直接dfs所有的狀態:
#include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; int n,m; char mapp[20][110]; int dfs(int cnt,int pos,int temp)//cnt表示樓層,pos表示是哪邊的樓梯,temp表示的是上樓要走多少步 { if(cnt<0) return 0; int ans=0; if(pos) { for(int i=m+2;i>=0;i--) { if(mapp[cnt][i]==‘1‘) { ans+=pos-i+temp; pos=i; temp=0; } } } else { for(int i=0;i<m+2;i++) { if(mapp[cnt][i]==‘1‘) { ans+=i-pos+temp; pos=i; temp=0; } } } ans+=min(dfs(cnt-1,0,temp+pos+1),dfs(cnt-1,m+1,temp+m+2-pos)); return ans; } int main() { cin.sync_with_stdio(false); while (cin >> n >> m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m + 2; j++) { cin >> mapp[i][j]; } } cout << dfs(n-1,0,0) << endl; } return 0; }
CodeForce-812B Sagheer, the Hausmeister(DFS)