hdu 2614 Beat (dfs水題)
阿新 • • 發佈:2018-11-11
題意很簡單,一個人喜歡做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;
}
}