• 圆桌游戏(区间DP)


    2.圆桌游戏
    (game.cpp/c/pas)
    【问题描述】
    有一种圆桌游戏是这样进行的:n个人围着圆桌坐成一圈,按顺时针顺序依次标号为1号至n号。对1<=i<=n的i来说,i号的左边是i+1号,右边是i-1号。1号的右边是n号,n号的左边是1号。每一轮游戏时,主持人指定一个还坐在桌边的人(假设是i号),让他向坐在他左边的人(假设是j号)发起挑战,如果挑战成功,那么j离开圆桌,如果挑战失败,那么i离开圆桌。当圆桌边只剩下一个人时,这个人就是最终的胜利者。
    事实上,胜利者的归属是与主持人的选择息息相关的。现在,你来担任圆桌游戏的主持人,并且你已经事先知道了对于任意两个人i号和j号,如果i向j发起挑战,结果是成功还是失败。现在你想知道,如果你可以随意指定每轮发起挑战的人,哪些人可以成为最终的胜利者?
    【输入】
    第一行包含一个整数n,表示参加游戏的人数;
    接下来n行,每行包含n个数,每个数都是0或1中的一个,若第i行第j个数是1,表示i向j发起挑战的结果是成功,否则表示挑战结果是失败。第i行第i列的值一定为0。
    【输出】
    一行,包含若干个数,表示可能成为最终胜利者的玩家的标号。标号按从小到大的顺序输出,相邻两个数间用1个空格隔开。
    【输入输出样例1】
    game.in game.out
    3
    0 1 0
    0 0 1
    0 1 0
    1 3
    【输入输出样例1说明】
    先指定2号向3号发起挑战,3号离开;再指定1号向2号发起挑战,2号离开。此时1号是最终胜利者。
    先指定1号向2号发起挑战,2号离开;再指定1号向3号发起挑战,1号离开。此时3号是最终胜利者。
    无论如何安排挑战顺序,2号都无法成为最终胜利者。
    【数据规模与约定】
    对于30%的数据,n≤7
    对于100%的数据,n≤100

    /*
    区间DP.
    啊这个题暴力可以30(懒~).
    刚开始因为过分考虑过程so蒟蒻表示比较难想{{{(>_<)}}}
    f[i][j]表示由i到j中间的参与者们能不能全部killed.
    一开始f[i][i+1]=true.
    然后判断谁杀了谁区间DP.
    */
    #include<iostream>
    #include<cstdio>
    #define MAXN 301
    using namespace std;
    int n,m,s[MAXN];
    bool f[MAXN][MAXN],g[MAXN][MAXN];
    int main()
    {
        freopen("game.in","r",stdin);
        freopen("game.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
        {
            scanf("%d",&g[i][j]);
            g[i+n][j]=g[i][j];g[i][j+n]=g[i][j];g[i+n][j+n]=g[i][j];
        }
        for(int i=1;i<=2*n;i++) f[i][i+1]=true;
        for(int i=1;i<=n;i++) s[i]=s[i+n]=i;
        for(int i=2*n;i>=1;i--)
          for(int j=i+1;j<=2*n;j++)
            for(int k=i;k<=j;k++)
            {
                if(f[i][k]&&f[k][j]&&(g[s[i]][s[k]]||!g[s[k]][s[j]])) {
                    f[i][j]=true;break;
                }
            }
        for(int i=1;i<=n;i++)
         if(f[i][i+n]) printf("%d ",i);
        return 0;
    }
  • 相关阅读:
    HP LoadRunner11.0下载地址(官网地址)
    出现500错误[code=CANT_CONNECT_LOOPBACK] Cannot connect due to potential loopback problems的解决方法
    一个数据库的所见即所得的好工具
    强制释放windows被占用的端口
    测试管理工具QC第二篇QC安装步骤(史上最详细的图解过程)第二篇server2003的环境设置
    NAT连接虚拟机和主机的通信(静态IP配置完整图解,测试通过可用)附vmware tools的安装(未完待续)第一篇
    QC插件大集合
    winmail搭建自己的邮件服务器第二篇(详细图解,测试通过)
    QTP基本脚本设计(第一部分)
    winmail搭建自己的邮件服务器第一篇(附详细图解测试通过可用)
  • 原文地址:https://www.cnblogs.com/nancheng58/p/10068198.html
Copyright © 2020-2023  润新知