在这里我们直接把题目抽离成顶点和边来描述,就不贴原题以避免引起不必要的解释。


问题描述:现在有一个简单无向图,且每个顶点最多与其他顶点之间连接m条边,现在有n个顶点,问最多能在各顶点之间连接多少条边?

标准输入n、m(1≤n≤10000,0≤m≤10000)

题解思路:

简单思考之后先把简单特殊情况梳理出来在程序中用if语句分开赋输出值output(单一出口原则):

1.m==0||m==1&&n>2||m==1的情况:output=0;

2.m≥n-1的情况:output=

;

3.简单情况列好之后,现在有:n-1>k≥2我们可以开始往最大的情况猜测,即:每条边都可以连接m条边,你说巧不巧居然真的成立(近似成立,在奇数时稍有调整)。下面给出不严谨的证明(一个说明:更严谨的证明应当对m、n的奇偶性利用螺旋归纳法证明结论f(n,m)=[m✖️n]/2,对两种情况分别推出f(n+1,m)和f(n,m+1),由于其中拆边补边的操作也较为简单,就把过程留给聪明的读者吧,相信你稍加思考便能想清楚是怎么回事):

情况一:m、n至少有一个偶数.

假设任意两条顶点之间都连接一条边,现在连接了

条边,我们现在对这个图 的边进行一系列消除,操作方法(操作方法便是直接构造的不严谨之处,利用螺旋归纳法可以避免直接完整构造):设所有顶点为e1,...,en,从第一个顶点e1到最后一个顶点en,每个点的度数逐个调整到m),由于所有的顶点之间都连接了边,从剩下的度大于m下标大于i的顶点中找到顶点可以与正在被操作的顶点ei之间的连线消除,使得在有限次操作之后可以恰好得到这个图的度数为m×n(为偶数,消去了

条边

),可以使得每个点的度数恰好为m;于是output=

情况二:m、n均为奇数时

同样进行任意两个顶点之间连接一条边的操作,然后对边进行消除,我们下面证明度数最高为m×n-1。

首先说明m×n-1一定成立:我们对顶点-度数(n,m-1)来说,它们之间可以按情况一的方式操作使得这n个顶点每个顶点的度数都为m,然后我们将n个点之间连线,最多可以连接

条线,使得这些顶点的度数为m,剩下一个度数为m-1,故这种情况成立。

然后证明度数大于等于m×n+1不成立(度数为偶数):由抽屉原理必然存在一个顶点,它的度数大于等于m+1,与题意矛盾。故有output=

综上,output=

,证毕

output=

附上简单的代码:

int output;if(m>=n-1){output=n*(n-1)/2;}else if(m==0||(n!=2&&m==1||n==1)){output=0;}else{output=n*m/2;}


P.S.好多大佬都已经过了这道题了...他们肯定写了几个很快猜出结论就直接输出了吧,他们都好厉害,我目前还做不到(可能很长一段时间都做不到),不过会尽力去适应的,上个月的这一天,也就是2.6日我开始了关于C语言的学习,两周跟着mooc把c语言的语法学完,然后好奇地上洛谷看了看很艰难地做了十道题之后,说实话挑战是很大的,期间有很多次wa,ce,tle,2月的月赛也出于试一试的心态报了div2,一下午4个小时,连滚带爬,顺便一位大佬(一直到现在给我提供的各种帮助我也感激不尽)捞了我一把,把第一道题在最后两分钟,5:58的时候做出来了,那时的感觉其实是与曾经做数学竞赛时解题的心情是类似的,于是之后退补选课的时候也把偏文的漫话数学建模给退掉,选了acm-icpc程序设计的选修课(不过每节课布置18道题好多啊QAQ),尽管现在做contest练习对我来说相对较难(日均2.5道题左右),但我仍然需要在尽力的尝试中才能进步。回忆两年前的时候,曾经平面几何怎么做都不顺手,在那天暑假大概七月下旬集训之后的十多天里决心把平几100题刷了五十道题,一直到当年联赛的时候,不都得心应手地解决了问题吗?即使我是一个相对愚钝的人,但我选择相信人的可塑性,努力不一定有所回报,但在我还一无是处的时候,我必须做出突出自己的选择,以及为之付出的决心。加油吧!先立个小目标:日均代码200行,以及第二个小目标:校赛不爆零。


这是我的第一篇有意义的文章,题也是刚刚做的,如果内容有不妥的地方欢迎指出,同时有一些具体的数学证明没有深入,都是以大白话的方式叙述的,所以有不严谨之处也请不吝赐教。谢谢你。

算法与程序设计_算法与程序设计入门-简单计算题1相关推荐

  1. 读书-算法《程序设计导引及在线实践》-简单计算题5:装箱问题

    问题: 问题分析:主要考虑3*3的产品问题,结合实现的代码想一下,或则是想一下再结合代码 编一下代码: #include <stdio.h> void main() {int N, a, ...

  2. moead算法流程步骤_算法——抓住程序的灵魂

    做任何事情都要有一定的步骤,为了解决一个问题而采取的方法和步骤就称为算法.C语言的算法是计算机算法,即计算机能够执行的算法.只有明确了算法后,才能使应用程序实现某些功能.所以,通常人们会将算法称为程序 ...

  3. python算法工程师书籍_算法工程师路线图(经验浓缩,纯干货!)

    说起算法(Algorithm),需要值得注意的是,数据结构与算法,机器学习算法都可简称为算法,但两者是完全不同的.数据结构与算法是计算机科学中的一门基础课程,主要内容是关于如何设计计算机程序,使得程序 ...

  4. 排序算法的时间复杂度_算法的时间复杂度

    一. 算法的时间复杂度 1.如何评估算法的性能 数据结构和算法,本质上是解决现实存在的问题,即如何让解决指定问题的代码运行得更快?一个算法如果能在所要求的资源限制(resource constrain ...

  5. a*算法的时间复杂度_算法基础——时间复杂度amp;空间复杂度

    关注.星标公众号,学点计算机知识. 整理:persistenceBin 今天来跟大家继续分享一下数据结构的基础知识--算法效率的度量:时间复杂度和空间复杂度.首先来跟大家分享一下在电影<复仇者联 ...

  6. a*算法迷宫 c++_算法竞赛专题解析(12):搜索基础

    搜索 搜索,就是查找解空间,它是"暴力法"算法思想的具体实现. 文章目录: 01 搜索简介 02 搜索算法的基本思路 03 BFS的性质和代码实现 04 DFS的常见操作和代码实现 ...

  7. a*算法的时间复杂度_算法的时间和空间复杂度,就是这么简单

    算法(Algorithm) 算法是程序用来操作数据.解决程序问题的一组方法.对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别. 那么我们应该如何去 ...

  8. 简述isodata算法的原理_算法常见面试题汇总(一):概率论与数理统计部分

    初级或中级算法岗面试题主要有四类:数理统计基础.机器学习模型原理.编程能力.项目经验.项目经验因人而异,所以仅总结前三个方面的基础知识,分享给朋友.(高级或资深算法岗面试内容不在本文范围内) 1.大数 ...

  9. c++矩阵连乘的动态规划算法并输出_算法面试必修课,动态规划基础题型归纳(三)

    动态规划(Dynamic Programming,简称DP),是大家都觉得比较难以掌握的算法.为了应付面试,我们经常会背诵一下DP问题的源码,其实,只要理解了思想,掌握基本的模型,然后再来点写代码的套 ...

最新文章

  1. Windows程序设计学习笔记(1):一个简单的windows程序
  2. RESTful之自动生成接口文档
  3. FPGA和DSP间基于SRIO的高速通信系统设计
  4. 快速的找出元素是否在list中 python
  5. BlogEngine.Net架构与源代码分析系列part12:页面共同的基类——BlogBasePage
  6. SparkStreaming项目(实时统计每个品类被点击的次数)
  7. 某些安卓手机在Mac系统下无法通过数据线连接ADB(安卓手机USB双模式)解决方案...
  8. 不靠运气靠实力 BEA全球大会千元门票免费送
  9. 在 SSD 上使用 btrfs 文件系统的相关优化
  10. 分享一些很小众但是很实用的软件
  11. 使用ffmpeg简单合并视频(2个以上)
  12. DES加密解密算法(简单、易懂、超级详细)
  13. windows移动硬盘接到mac上使用(加载ntfs移动硬盘)
  14. Mac没声音解决办法记录
  15. Win32 IME 编程心得【转】
  16. 计算机视觉基础知识复习
  17. 【感恩】为做运维的重病老同事李静波寻求帮助
  18. 2020,我不想奋斗了
  19. 无法打开位置服务器,电脑的定位功能无法打开怎么办?
  20. 虚拟服务器不能打字,光遇修理服务器,玩家无法打字聊天,如何用“光语”说我爱你?...

热门文章

  1. 【SpringCloud】Spring cloud Alibaba Sentinel 规则持久化
  2. 【Kafka】kafka 创建 topic的时候 Replication factor 参数理解
  3. Spark调优 shuffle调优
  4. 【Flink】Flink 操作HDFS报错 hadoop is not in the classpath/dependencies
  5. 95-180-040-源码-Watermark-简介
  6. 14-Scala之隐式转换
  7. spark学习-JavaRDD注册成表然后用SparkSQL查询
  8. 超给力,抛弃手动维护,一键生成数据库文档、支持多种格式!
  9. 记一道简单的Java面试题,但答错率很高!
  10. WSS3.0安装后,系统资源消耗这么大