• hdu 3632 A Captivating Match 夜


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

    还是做题爽

    kill[l][r] 表示通过一定策略 l 是否可以把 l -- r 之间的其他所以人都淘汰掉

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    
    #define ll long long
    using namespace std;
    
    const int N=105;
    //const ll MOD = 1000000007;
    int a[N][N];
    int v[N];
    int kill[N][N];
    int main()
    {
    	//freopen("data.in","r",stdin);
    	int T;
    	scanf("%d",&T);
    	for(int w=1;w<=T;++w)
    	{
    		int n;
    		scanf("%d",&n);
    		for(int i=1;i<=n;++i)
            scanf("%d",&v[i]);
            memset(kill,0,sizeof(kill));
    		for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
            {
                scanf("%d",&a[i][j]);
                if(i==j||(abs(i-j)==1&&a[i][j]==1))
                kill[i][j]=1;
            }
            for(int k=1;k<=n-2;++k)
            for(int i=1;i+k+1<=n;++i)
            {
                int l=i;
                int r=i+k+1;
                for(int m=l+1;m<r;++m)
                if(kill[l][m]&&kill[m][r])
                kill[l][r]=1;
                for(int m=l;m<r;++m)
                if(kill[l][m]&&kill[r][m+1]&&a[l][r])
                kill[l][r]=1;
                for(int m=r-1;m>l;--m)
                if(kill[r][m]&&kill[m][l])
                kill[r][l]=1;
                for(int m=r;m>l;--m)
                if(kill[r][m]&&kill[l][m-1]&&a[r][l])
                kill[r][l]=1;
            }
    		int k=-1;
    		for(int i=1;i<=n;++i)
    		{
    			if(kill[i][1]&&kill[i][n]&&(k==-1||v[k]<v[i]))
    			k=i;
    		}
    		printf("Case %d: ",w);
    		printf("%d\n",v[k]);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    rgbdslam 源代码的实现
    键值对排序并MD5加密
    字符编码
    排序算法
    Bridge Pattern (桥接模式)
    Visitor Pattern 和 doubledispatch
    栈、队列、链表
    如何使用visio
    架构师论文
    英语写作句子
  • 原文地址:https://www.cnblogs.com/liulangye/p/3071485.html
Copyright © 2020-2023  润新知