圆桌游戏_圆桌游戏txt

圆桌游戏_圆桌游戏txt【问题描述】有一种圆桌游戏是这样进行的:n个人围着圆桌坐成一圈,按顺时针顺序依次标号为1号至n号。对1#include#includeusingnamespacestd;intn,f[109]

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

【问题描述】
有一种圆桌游戏是这样进行的: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】
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

30分的做法:搜索。

100分的做法:区间dp
将圆桌拆成链:1,2,3…n-1,n,1,2…n
f[i,j]表示第i个人有没有可能与第j个人相邻(i向左,即 j 在 i 的左边)
f[i,i+n]为真 – i有可能成为最终胜利者
枚举i到j之间最后一个出局的人k
i – k – j
k有两种出局方式
① i挑战k成功
② k挑战j失败
如果存在一个k,使得i能与k相邻,k能与j相邻,且k可能以以上两种方式中的一种出局,说明i和j可以相邻
O(n3)

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,f[109][109],dp[209][209],id[209];
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",&f[i][j]);
    for(int i=1;i<2*n;i++) dp[i][i+1]=1;

    for(int i=1;i<=n;i++) id[i]=i,id[i+n]=i;

    for(int i=2*n-2;i>=1;i--)//倒着枚举,以便向前拓展
    for(int j=i+2;j<=2*n;j++)
    for(int k=i+1;k<j;k++)
    if(dp[i][k]&&dp[k][j]&&(f[id[i]][id[k]]||!f[id[k]][id[j]]))
     dp[i][j]=1;

    for(int i=1;i<=n;i++) if(dp[i][i+n]) printf("%d ",i);
    return 0;
} 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 云时代如何保护数据

    云时代如何保护数据

    2021年8月9日
    49
  • SpringMvc工作原理学习总结

    SpringMvc工作原理学习总结SpringMvc工作原理了解SpringMvc之前先看看Mvc的工作原理1、MVC工作原理M:Model(完成业务逻辑Service/dao/entity/)V:View(完成界面渲染jsp/html)C:Controller(控制器->类似于CPU接受请求->调用M->返回V)MVC工作原理图2、SpringMvc工作原理Spring和SpringMvc的关系:SpringMVC是一个MVC的开源框架,SpringMVC是Spring的一个

    2022年5月15日
    45
  • Ajax中Success中进行跳转问题

    Ajax中Success中进行跳转问题我在使用ajax的过程中,当返回成功信息的时候在success:function()跳转另一个页面使用了window.location("url")来跳转页面,出现了页面无法跳转的问题。自己整理,记录下来。Ajax部分代码: $.ajax({ ‘url’: "${pageContext.request.contextPath}/MailVerify", …

    2022年6月13日
    36
  • Anaconda 安装Opencv库心得「建议收藏」

    Anaconda 安装Opencv库心得「建议收藏」1.anaconda安装按照提示一步一步来,基本没啥大问题,就是要记得添加环境变量,记得要换源,添加环境变量中,最好把以下四项都添上,有些人只添加了D:\anaconda3这一项,但是为了保险起见,最好四项都加上。如下图所示:2.**(1)**在安装opencv环节,我走了很多弯路,我是从进入清华大学镜像中心下载,地址(比官网快):https://pypi.tuna.tsinghua.ed…

    2022年10月8日
    0
  • spring是什么意思_什么spring是孩子

    spring是什么意思_什么spring是孩子Spring是什么?            Spring是一个开源的轻量级的Java开发框架。  2.Spring能帮我们做什么?          简化应用程序的开发。  3.简化应用程序开发体现在哪些方面?     ①IOC容器       Java思想是面向对象的开发,一个应用程序是由一组对象通过相互协作开发出的业务逻辑组成,那么如何管理这些对象,使他们高效地协作呢?抽象工厂、工…

    2025年6月13日
    0
  • pcanywhere设置主控端_redis修改端口

    pcanywhere设置主控端_redis修改端口  有些防火墙只允许一个pcAnywhere被控端使用一个IP端口。而防火墙后面的其它pcAnywhere被控端必须使用另外的端口。希望知道如何更改这些端口。   更改pcAnywhereIP端口需要编辑Windows注册表。如果需要频繁的执行此操作,创建.reg文件是最安全也是最方便的更改方法。尤其对于那些可能需要连接_blank”>防火墙后多个被控端的主控端而

    2022年9月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号