1. 程式人生 > >hdu 2614 Beat (dfs水題)

hdu 2614 Beat (dfs水題)

題意很簡單,一個人喜歡做ACM題,現在有n道題,做完每道題需要一個時間,比如做完第一題用了i分鐘,那麼他要做的下一題花費的時間j要保證j>=i。不然他不做。問最多能做幾題。
很清晰的dfs題目,資料弱到暴力都可以過(有人測過)。因為題目簡單,嘗試了一下之前不是很熟練的遞迴dfs(因為之前比較喜歡手工棧dfs)。程式碼擼一遍很順。測樣例的時候出了問題。因為發現樣例和我理解的題意有區別。當時我就很蒙,因為題目沒寫的很清晰,我理解樣例是靠下面的hint的。然後分析了半天樣例,發現hint出錯了。導致我把x和y弄反了,所以我連樣例都過不去。改了交一發就過了。

#include<iostream>
#include<algorithm> #include<cstring> using namespace std; const int maxn=16; int arr[maxn][maxn]={0}; int fl[maxn]={0}; int n; int sum; int maxx; int Max(int a,int b) { return a>b?a:b; } void dfs(int a,int b,int max,int nu) { int flag=0; for(int i=0;i<n;i++) { if
(arr[b][i]>=max&&fl[i]==0&&b!=i) { flag=1; fl[b]=1; dfs(b,i,arr[b][i],nu+1); fl[b]=0; } } if(flag==0) { maxx=Max(maxx,nu); return ; } else return ; } int main() { while(cin>>n) { memset
(arr,0,sizeof arr); memset(fl,0,sizeof fl); maxx=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>arr[i][j]; } } fl[0]=1; dfs(0,0,0,1); cout<<maxx<<endl; } }