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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41564817/article/details/82291942
今日推荐