题目链接:点击查看

题目大意:杰瑞和汤姆在玩游戏,游戏规则是:汤姆会拿来N个容器,每个容器内一开始就会包含1~N个小球,现在轮到杰瑞操作了,杰瑞可以选择往每个容器里加入0个或者任意k的倍数个小球,问杰瑞能否让最后有一个容器中有一个小球,有一个容器中有两个小球,依次类推,让每个容器中的小球个数都是递增上升的,直到N结束

题目分析:刚看完这个题目之后以为上升的序列必须是连续的,判断交上去直接WA了一发,后来意识到这个序列也不一定连续,通过操作可以让一个1 1 1 1的序列变为1 3 2 4,这个序列也是满足题意的,所以这就变成了一个二分图最大匹配的问题,我们可以一开始让容器编号对于最后结果建边,也可以让最后结果对于容器编号建边,建好边后跑一遍匈牙利并且记录一下最大匹配量就可以判断能否达到结果了,这里我用的是答案对于容器建边,其实都一样,看自己的个人爱好了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef unsigned long long ull;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;int a[N];int n,k;bool maze[N][N];int match[N];bool vis[N];bool dfs(int x)
{for(int i=1;i<=n;i++)//枚举容器编号{if(maze[x][i]&&!vis[i]){vis[i]=true;if(!match[i]||dfs(match[i])){match[i]=x;return true;}}}return false;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){scanf("%d%d",&n,&k);memset(maze,false,sizeof(maze));memset(match,0,sizeof(match));for(int i=1;i<=n;i++)scanf("%d",a+i);for(int i=1;i<=n;i++)//枚举每个容器{for(int j=a[i];j<=n;j++)//枚举每个可能到达的答案 {int temp=j-a[i];if(temp%k)continue;maze[j][i]=true;//maze[可到达答案的值][容器编号]}}int ans=0;for(int i=1;i<=n;i++)//枚举答案{memset(vis,false,sizeof(vis));if(dfs(i))ans++;}if(ans==n)//若所有容器和答案都匹配,则杰瑞胜利,否则汤姆胜利printf("Jerry\n");elseprintf("Tom\n");}return 0;
}

HDU - 5090 Game with Pearls(二分图最大匹配)相关推荐

  1. HDU - 1528 Card Game Cheater(二分图最大匹配)

    题目链接:点击查看 题目大意:题意有点像求田忌赛马的最优解,大概意思就是现在有两个人,每个人都有n张不同的扑克牌,扑克牌的大小首先以点数来确定,点数相同的情况下以花色来决定,红桃(Heart)> ...

  2. HDU - 2063 过山车(二分图最大匹配)

    题目链接:点击查看 题目大意:中文题目,不多赘述 题目分析:二分图最大匹配问题,匈牙利经典算法模板题,感觉这个博客写的很好,插个眼: https://article.itxueyuan.com/Aea ...

  3. HDU 5090 Game with Pearls (贪心)

    一道贪心的题,因为最小的不能由别的转化,所以每次贪心找最小的,其余的转化成大的. 从小到大,最小的如果不存在那么就break,否则减去一个,剩下的加k继续判断. #include<cstdio& ...

  4. HDU 3729 I'm Telling the Truth(二分图最大匹配)

    HDU 3729 I'm Telling the Truth(二分图最大匹配) http://acm.hdu.edu.cn/showproblem.php?pid=3729 题意: 一位老师想问N位同 ...

  5. HDU - 1054 Strategic Game(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一棵树,现在要在节点上放置士兵,每个士兵可以监视与其所在的节点直接相连的节点,问最少需要多少个士兵才能将整棵树都监视到 题目分析:求最少的节点,以保证每条边都有一个端 ...

  6. HDU - 2389 Rain on your Parade(Hopcroft-Krap算法求二分图最大匹配)

    题目链接:点击查看 题目大意:给出n个人和m个雨伞,t分钟后就要下雨了,现在给出每个人的坐标和速度,以及雨伞所在的坐标,每个雨伞只能容纳一个人,题目问最多有多少个人能不被淋到 题目分析:二分图最大匹配 ...

  7. HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...

  8. 贪心 HDOJ 5090 Game with Pearls

    题目传送门 1 /* 2 题意:给n, k,然后允许给某一个数加上k的正整数倍,当然可以不加, 3 问你是否可以把这n个数变成1,2,3,...,n, 可以就输出Jerry, 否则输出Tom. 4 贪 ...

  9. 二分图判断以及二分图最大匹配

    概念 二分图又称作二部图 ,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的 ...

最新文章

  1. Selenium启动Chrome浏览器提示“请停用以开发者模式运行的扩展程序”的解决办法
  2. 知识图谱 vs. 对话系统专题讨论 - PaperWeekly 社区
  3. dotnet 通过引用 msbuild 程序集实现自己定制编译器
  4. (dijkstra记录路径)find the longest of the shortest
  5. python同时满足两个条件_python算法-快速寻找满足条件的两个数
  6. 西部数据app可导致Windows 和 macOS 提权
  7. 常用正则表达式及基础语法
  8. 信号与线性系统分析 吴大正 (与电子 通信专业的同学共勉)
  9. Android App拥有system权限
  10. 解决Oracle进入实例账号,练习表的问题
  11. 记参加Microsoft Ignite 大会和北京CSDN创作者之夜
  12. java面试之自我介绍
  13. ubuntu18打开网页慢的问题
  14. STM32H7的终极调试组件Event Recorder
  15. 02尚硅谷书城案例-用户的注册
  16. c程序设计语言看第几版,到底该怎样评价谭浩强版《C程序设计》?
  17. XSS第一节,XSS档案
  18. 水果店促销方案,水果店开业怎么搞促销
  19. 3D/VR/AR简易技术原理介绍
  20. 淘系技术内容中台负责人接受采访回应“淘宝为什么要做媒体化升级”

热门文章

  1. MySQL模糊查询—is null关键字
  2. Nginx负载均衡策略之least_conn
  3. 方法引用_通过super引用父类的成员方法
  4. 类属性-类属性的定义及使用
  5. cookie和session常见问题
  6. Oracle 存储过程入门
  7. .net core webapi 列表返回指定的字段_ADO.NET 使用初探之SQL操作 | C# 数据操作系列...
  8. 201209阶段二FFmpeg转码
  9. [PHP 安全] pcc —— PHP 安全配置检测工具
  10. FortiGate设置E-mail告警