HDU 2625 Say love to you once again

 

http://acm.hdu.edu.cn/showproblem.php?pid=2625

随便写出一个dfs然后猥琐随机化法剪枝,第一次AC的战绩是1/18,还跑了700+ms,随机50w次成功率还这么低。。。最近rp真是太烂了有木有。。。

View Code
#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std ;

int map[30][30] ;

int n ;

int ans ;

int vis[30] ;

void dfs(int d)

{

    if(d==n)

    {

        int temp=0 ;

        for(int i=0;i<n;i++)

            if(vis[i])

                for(int j=0;j<n;j++)

                    if(!vis[j])

                        temp+=map[i][j] ;

        if(ans<temp)

            ans=temp ;

        return ;

    }

    vis[d]=1 ;

    dfs(d+1) ;

    vis[d]=0 ;

    dfs(d+1) ;

}

int main()

{

    while(~scanf("%d",&n))

    {

        for(int i=0;i<n;i++)

            for(int j=0;j<n;j++)

                scanf("%d",&map[i][j]) ;

        memset(vis,0,sizeof(vis)) ;

        ans=0 ;

        if(n<20)

            dfs(0) ;

        else

        {

            int times=500000 ;

            srand(time(0)) ;

            while(times--)

            {

                vis[rand()%n]^=1 ;

                int temp=0 ;

                for(int i=0;i<n;i++)

                    if(vis[i])

                        for(int j=0;j<n;j++)

                            if(!vis[j])

                            temp+=map[i][j] ;

                if(ans<temp)

                    ans=temp ;

            }

        }

        printf("%d.\n",ans) ;

    }

    return 0 ;

}

 

你可能感兴趣的:(love)