POJ 1143 Number Game

SerDes电路的PCB仿真设计规则及策略 SerDes的PCB设计中,重点工作是使用3D 电磁 (EM) 场求解器,进行过孔结构优化,包括 BGA的扇入和扇出区域以及布线的过孔区域,并且,利用连接器供应商提供加密的 3D 模型,进行连接器和 PCB 的级联仿真,最终获取系统级的通道性能参数,如插入损耗、回波损耗、串扰和模式转换、阻抗曲线等,如果发现任何缺陷,再进行进一步优化,这一过程中,推荐进行拆分仿真,以提高设计效率。 阅读详情

/*

http://acm.pku.edu.cn/JudgeOnline/problem?id=1143

博弈论(DFS + 状态记忆表 + 位运算), 假定一个走的人是A,第二个走的人是B
 A在当前状态下一定能够取胜的条件是:当前状态下存在一个数字,对于当A取走
 这个数字后的状态,B不管怎么取都得输(即B不能够绝对取胜)
 
 有了上面的分析就很容易看出这是一道博弈题,最终会形成一棵博弈树.假定最上面一层
 是A开始取,编号是1,那么所有A来取的都是奇数层,所有B来取的都是偶数层,奇数层对A来
 说, 各种取法之间是或的关系,即只要存在一种可以取胜的情况那么A就从当前层胜出,而
 偶数层对A来说是与的关系,即只有当所有取法对B来说都是输的时候A才获胜.(其实偶数层
 对B来说也是或的关系,只要有一种取法导致A输掉,B就获胜,所以相对A来说就是与关系了)
 */
 
#include <iostream>
#define MAX_N 20             //最大N
#define MAX_STATE 1048576    //2 ^ 20, 最大的状态数
using namespace std;

int exp[MAX_N + 1];          //记录2 ^ i
bool res[MAX_N + 1];         //记录结果,res[i] = true表示对A来说取数字 i + 1 是winning move
int record[MAX_STATE];       //记忆表, 其取值表示当前状态是winning move 还是 losing move
                             //1: winning move, 2: losing move, 0: not sure yet.
                             //比如: record[18] = 1表示对当前取者来说18是winning move;
                             //record[6] = 2,表示对对当前取者来说, 6不是winning move
int num, state, maxD;

bool dfs(int curState, int curLevel)
{
    //如果无数字可取, 则是losing move
    if(curState == 0)
        return false;
    int i, j, k, newState;
    bool can = true;
    bool finalCan = false;

    //遍历所有可取的数字
    for(i = 0; i <= maxD - 1; i++)
    {
        if(curState & exp[i])
        {
            //取这个数字, 将对应bit置为0
            newState = curState ^ exp[i];
            //取完后,要做一个判断,对于比所取数字大的其他数字,进行加法分解,
            //如果存在一个分解,分解得到的两个数字都已经被取过了,那么这个数不应该继续存在也需要被置0
            //比如:对于状态2 3 4 5,如果取了2,那么4肯定就也不能继续存在了
            for(j = i + 1 + 1; j <= maxD; j++)
            {
                if((newState & exp[j - 1]) == 0)
                    continue;
                for(k = 2; k <= j / 2; k++)
                {
                    if((newState & exp[k - 1]) == 0 && (newState & exp[j - k - 1]) == 0)
                    {
                        newState = newState ^ exp[j - 1];
                        break;
                    }
                }
            }
            int  t;

            //查看记忆表,看这个状态是否已经计算过了
            t = record[newState];
           
            bool type;
            if(t == 1)
                type = true;
            else if(t == 2)
                type = false;
            else //没有计算过的话需要进一步DFS
                type = dfs(newState, curLevel + 1);
            //对于第一层需要额外记忆,以便最终输出
            if(curLevel == 1)
            {
                if(!type)
                {
                    res[i] = true;
                    finalCan = true;
                    //写入记忆表
                    if(!record[curState]) record[curState] = 1;
                }
            }
            //如果对方下一步不可取,那么当前就是winning move
            else if(!type)
            {
                //记忆并返回
                if(!record[curState]) record[curState] = 1;
                return true;
            }
           
        }
    }
    if(curLevel == 1)
    {  
        if(finalCan)
        {
            if(!record[curState]) record[curState] = 1;
            return true;
        }
        else
        {
            if(!record[curState]) record[curState] = 2;
            return false;
        }
    }
    //能走到这儿说明对于自己的所有走法,对方都能够取得winning move,所以自己是losing move
    else
    {
        if(!record[curState]) record[curState] = 2;
            return false;
    }
}
int main()
{
    int i, digit, caseNum = 0;
    exp[0] = 1;
    for(i = 1; i < MAX_N; i++)
        exp[i] = exp[i - 1]<<1;
    while(cin>>num && num != 0)
    {
        caseNum++;
        state = 0;
        maxD = INT_MIN;
        memset(res, 0, sizeof(res));
        //memset(record, 0, sizeof(record)); 不要清0,因为记忆表还可以留给下一个case用
        for(i = 1; i <= num; i++)
        {
            cin>>digit;
            if(digit > maxD)
                maxD = digit;
            state = state | exp[digit - 1];
        }
        bool can = dfs(state, 1);
        cout<<"Test Case #"<<caseNum<<endl;
        if(!can)
            cout<<"There's no winning move."<<endl;
        else
        {
            cout<<"The winning moves are:";
            for(i = 0; i < maxD; i++)
            {
                if(res[i])
                    cout<<" "<<i + 1;
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
   
}

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红 文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖 阅读详情

相关推荐

历年CSP-J(NOIP普及组)考点分析与分类汇总(纯干货)

noip/csp-j历年真题考点分类

weixin_42358969的博客 1万+

poj1143 记忆化搜索+状态压缩

题意:给定一个序列,轮到谁,取出一个数k删除,并删除i*k(i=1,2,3,.....),设k1为已经删除的数,同时删除k1*i+k*j,(i=1,2,3,.....;j同上 ),思考:考虑n为最大为20,而且ai最大为20,对于每个输入的数状态压缩,二进制的从右到左第几位为1说明此数被输入,先手必赢得状态是走完当前步,后手没有必赢状态,依据这个 从下往上dfs,枚举每种情况并记录状态,重复状态不...

OJBFOWE的博客 589

WOFOST模型参数调优实战:从‘跑不通’到‘预测准’的避坑指南

本文详细介绍了WOFOST模型参数调优的实战技巧,帮助用户从模型报错诊断到参数敏感性分析,再到土壤-作物参数联调策略,逐步解决‘跑不通’到‘预测准’的问题。通过Python和PCSE工具,提供参数扰动测试模板和关键参数优先级矩阵,助力作物模型的高效校准与预测。

weixin_32597009的博客 622

POJ 1143

题意:两个人玩游戏,初始集合S为大于1的正整数集,轮流写出一个大于1的数然后将:“1、所有这个数的倍数;2、这个数的倍数与前面已经删去的数的和”从集合S中删去,现在告诉你S的现状,求所有必胜走法的第一步。 题解:数的数量小于20,可以用位压缩dp,记录S中还剩哪些元素时是否是必胜态,然后通过记忆化搜索求出所有走第一步后是必败态的策略。 View Code 1 #include<...

weixin_30539835的博客 232

拆解一个带主动均衡的BMS模块:从变压器、MOS管矩阵到控制逻辑,图文详解内部设计与成本构成

本文深度拆解了一款带主动均衡功能的BMS模块,详细解析了其核心架构、元器件选型与成本构成。通过高频变压器、MOS管矩阵等硬件设计,该模块实现了高达87%的能量转移效率,远超普通被动均衡方案。文章还揭示了汽车级PCB设计、软件策略优化等关键技术细节,为锂电池管理系统设计提供了实用参考。

weixin_42638178的博客 348

AMDGPU SVM VRAM Migration 实现详解

AMD正在基于DRM SVM框架重构SVM实现,该框架即将广泛应用。本文分析了AMD开发者提交的POC验证版本的技术方案。该架构分为三层:AMDGPU SVM映射层、DRM Pagemap通用框架层和AMDGPU迁移后端硬件驱动层。系统涉及三个地址空间转换:VRAM分配器空间、HPA/PFN空间和GPU PTE地址空间。关键数据结构包括设备级迁移基础设施amdgpu_pagemap、迁移临时BO包装器amdgpu_svm_bo等。该方案通过地址空间转换实现VRAM迁移功能,目前仍处于POC阶段,设计可能变更

图形/计算GPU的驱动与虚拟化技术分享园地 866

(弃疗搁置T)poj 1143 记忆化搜索+状压dp+dfs

Number Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3078   Accepted: 1235 Description Christine and Matt are playing an exciting game they just invente

cokomowang的专栏 550

多智能体强化学习MATD3算法完整复现与分析

多智能体强化学习MATD3算法复现与分析摘要 MATD3算法是多智能体深度强化学习领域的重要进展,通过改进MADDPG算法,引入双Q学习、延迟策略更新和目标策略平滑等技术,显著提升了算法稳定性。本文完整复现了MATD3算法,详细解析了其数学原理,包括部分可观测马尔可夫博弈模型和TD3核心思想。在实现层面,设计了集中式Critic和分布式Actor的神经网络架构,采用PyTorch框架构建了Actor-Critic网络模块,包含精心设计的权重初始化和训练流程。该算法有效解决了多智能体环境中的非平稳性、信用分配

max500600的博客 529

ACM学习-POJ-1143-Number Game

菜鸟学习ACM,纪录自己成长过程中的点滴。 学习的路上,与君共勉。 ACM学习-POJ-1143-Number Game Number Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2914   Accepted: 1162

Colin丶 2909

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由(如何解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题)

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由

XiaoqiangClub的博客 1万+

基于扣子3.0复刻MIT“AI股神团队版”:实时股票数据API接入与策略选股复盘系统

基于扣子3.0的AI量化投资系统摘要 本文提出了一种基于扣子(Coze)3.0平台的AI量化投资解决方案,整合实时股票数据与策略选股功能。系统采用三层架构: 数据层:通过AKShare等开源工具获取A股实时行情和历史K线数据,支持批量数据抓取和清洗 策略层:内置多因子选股模型和技术指标分析模块,实现自动化标的筛选 应用层:利用扣子3.0的插件和工作流功能,构建从数据采集到投资建议的完整流程 系统特点包括:完全开源的数据接入方案、Python实现的策略计算模块、以及扣子平台提供的可视化编排能力~~~~~~~~

huanghm88的专栏 267

POJ-1143(状态压缩)

Number Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3432 Accepted: 1399 Description Christine and Matt are playing an exciting game they just invented: the Num...

weixin_30773135的博客 196

使用Python实现深度学习模型:智能光污染监测与管理

本项目将通过以下几个步骤实现智能光污染监测:收集光污染图像数据数据预处理构建深度学习模型训练模型评估模型部署模型用于实时监测通过本文介绍的步骤,我们实现了一个使用Python和深度学习技术的智能光污染监测与管理系统。该系统能够自动识别光污染源,为相关管理部门提供科学依据,以便更好地规划和管理城市照明。同时,这一方法还可以扩展到其他环境监测领域,为环境保护贡献力量。

Echo_Wish 593

poj 1143 Number Game 博弈 记忆化状态压缩搜索

poj 1143 Number Game http://poj.org/problem?id=1143 第一道博弈题,纠结了好久好久好久…… 题意:给定2到20的数,当选择一个数后,次数的倍数不可再选,已选的数的和不可再选,例如选择了2和3,则2*2, 2*3, 2*4,(2+3) , (2*2+ 3*5)...这些数都不能再选 问最先走那步可必胜   对于一个状态(已走好),若能走到

倩 921

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

poj1143Number Game

Description Christine and Matt are playing an exciting game they just invented: the Number Game. The rules of this game are as follows.  The players take turns choosing integers greater than 1. Fi

5年Java后端研发,分享个人读书学习笔记。 438

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

[POJ1143]Number Game

[POJ1143]Number Game 试题描述 Christine and Matt are playing an exciting game they just invented: the Number Game. The rules of this game are as follows.The players take turns choosing integers great...

weixin_30305735的博客 114

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

poj 1143 number game

题目比较长,题意不大好理解 现在把题意抽象一下,大概是以下意思: 1.给2~20的数字中的几个数组成数组a,其中是你可以选择的数字; 2.选择的规则如下: (1).如果选择了某个数字x,则数组a中是其倍数的数字将被划去; (2).假如数字n在数组a中,若n-x 的值并不在数组a中,则划去n; 3.当没有数字可以选取时,则此player失败; 4.让你找出先选的player选择哪个数字

GejinZ 1123

POJ 1143Number Game

Description Christine and Matt are playing an exciting game they just invented: the Number Game. The rules of this game are as follows. The players take turns choosing integers greater than 1. First,

zhengjihao的博客 426

POJ:1143 Number Game

题意:两个人玩游戏,初始集合S为大于1的正整数集,轮流写出一个大于1的数然后将:“1、所有这个数的倍数;2、这个数的倍数与前面已经删去的数的和”从集合S中删去,现在告诉你S的现状,求所有必胜走法的第一步。 题解:数的数量小于20,可以用位压缩dp,记录S中还剩哪些元素时是否是必胜态,然后通过记忆化搜索求出所有走第一步后是必败态的策略。 1 #include&lt;cstdio&gt; 2...

宴夜小丑的博客 358

poj1143 Number Game

发帖纪念我想了一整天的题,从早上到晚上现在 #include #include #include #include #include #include using namespace std; int dp[1<<19]; int dfs(int state) { if(dp[state]>=0)return dp[state]; for(int i=0;i<19;i++)

Slow_Wakler的专栏 637

poj1143(Number Game)

题目大意:        Christine和Matt玩一个游戏.游戏的规则如下:一开始有一列数字(2~20),有的被列出,有的没有列出.从Christine开始,两人轮流划去一个已被列出的数字.每划去一个数字,其他的所有的能被不在这个数列的数字的两两整线性表示的数也自动从数列

ll365594480的专栏 1376

Number Game poj1143

Description Christine and Matt are playing an exciting game they just invented: the Number Game. The rules of this game are as follows.The players take turns choosing integers greater than 1. First,...

weixin_33883178的博客 118

POJ 1143 Number Game(状压DP)

Description Christine and Matt are playing an exciting game they just invented: the Number Game. The rules of this game are as follows.  The players take turns choosing integers greater than 1. Fi

szhouan的博客 301

poj 1143 Number Game

博弈思想,状态压缩后记忆化搜索,必胜状态的条件为自状态存在必败状态。 g++ 0ms ac    c++wa 知道原因的留个言   #include #include #include #include #include using namespace std; int vis[600005], a[25], p2[25], cnt, ans[25]; //一共2^19种状态,19位2进制记

taozifish的专栏 759

POJ-1143-Number Game

这个题算DP吧,但用记忆化搜索和位运算就可以过~ 注意状态的压缩和记忆,题意搞了半天,后来参考了网上高人的题解和代码才搞懂题意,主要是线性表示那~ 代码: #include #include #include #include using namespace std; const int maxn=21; int n,pos,a[maxn],ans[maxn],cnt; int dp[209

z309241990的专栏 997
上一篇: POJ 1142 Smith Numbers
下一篇: POJ 1144 Network
bobten2008
博客等级 码龄18年 153粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值