离散数学笔记,基础数学分支

1、给定n个数字,要求选出3个数,其和为3的倍数。

思路,分类,把每个数字%3后,0、1、2、的分成三类,然后按类计算。

①、三个数来自同一个类,②、来自0、1、2各一类。

2、将r个相同的球放到n个不同的盒子里面,盒子的球数不限,求方案数。

将r个球用0表示,就是000000....000,然后分成n份,所以需要插上n - 1刀,所以就是r + n - 1长度的01串中,其中1的个数是n - 1个,求有多少种。就是C(n + r - 1, n - 1)。比如分成两份,如果是100的话,就是第一份个数是0,第二份个数是2.

这题也可以这样想,用xi 表示第i个盒子中的球数,其中xi >= 0。所以就是x1 + x2 + x3 + .... + xn = r的解的个数。思路和上面一样。

3、求解x1 + x2 + x3 + x4 = 10的个数,其中xi >= ai

每个数都有权值了,但是明显可以把每个数都减去自身的权值,又回到xi >= 0的解法。

4、求解x1 + x2 + x3 + x4 <= 10。其中xi >= ai

由于是小于等于,那么可以去掉权重后,加多一个辅助变量x5

变成x1 + x2 + x3 + x4 + x5 = 10的解的方案数。为什么呢?

比如1 + 1 + 1 + 1 = 4 < 10是成立的,然后剩下的就相当于给x5了,x5 = 6,然后就是相加等于10的方案数。

变形一下:在一排有20本书的书架上,选出6本书,要求这6本书不能相邻,求方案数。

设xi表示第i本书与上一本书的间隔书的数目,为了满足条件。x1 >= 1, 其他xi >= 2。

那么就是要x1 + x2 + x3 + x4 + x5 + x6 <= 20

5、count how many hello world

for (int i = 1; i <= n; ++i)

  for (int j = 1; j <= i; ++j)

    for (int k = 1; k <= j; ++k)

      cout << "hello world" << endl;

输出运行了多少次hello world

考虑大小关系,n >= i >= j >= k >= 1

①、如果i和j和k不能相等,那么就是在1、2、3、4、5、6、7....n里,选3个数出来就好了C(n, 3)

但是这里可以相等。

时间: 2024-08-24 18:12:39

离散数学笔记,基础数学分支的相关文章

【Git】笔记5 分支管理2

来源:廖雪峰 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息. git merge --no-ff -m "merge with no-ff" dev 合并dev分支,请注意--no-ff参数,表示禁用Fast forward,因为本次合并要创建一个新的commit,所以加上-m参数,把com

【Git】笔记4 分支管理1

1.创建与合并分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点: 每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长: 当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上: 你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文

Git学习笔记五--分支管理

为什么要引入分支? 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作. 查看分支:git branch 创建分

Java基础学习笔记 -- 6(分支语句)

分支语句 1)if...else...分支 ① 独自的 if 语句,不与else配合 语法: if ( boolean 表达式) { 语句块 : } 后面代码... 运算:当boolean表达式成立,执行语句块,不成立,则跳过语句块执行后面内容. 案例11: ② if...else... 语句 语法:if ( boolean 表达式) { 语句块1: } else { 语句块2: } 后续代码... 运算:当boolean表达式成立,执行语句块1的内容,不成立,执行语句块2的内容,(二者选其一)

【转】寻找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater) (v1.0) (

原文网址:http://blog.sina.com.cn/s/blog_46dac66f01000b57.html 寻找最好的笔记软件:三强篇(EverNote.Mybase.Surfulater) v1.0 作者:SuperboyAC 编译:xbeta 本系列还有:海选篇.三强篇.梦想篇.结论.篇外 通过上一篇<寻找最好的笔记软件:海选篇>的综合分析,作者发现有3种软件具有较明显的优势,可谓“笔记软件三强”.它们是:EverNote.Mybase 和 Surfulater.此三者相同之间差异

java运行环境

1.Java开发环境: 1)java编译运行过程:-----------常见面试题 1.1)编译期:.java源文件,经过编译,生成.class字节码文件 1.2)运行期:JVM加载.class并运行.class(0和1) 特点:跨平台.一次编程到处使用 2)名词解释: 2.1)JVM:java虚拟机 加载.class并运行.class 2.2)JRE:java运行环境 除了包含JVM以外还包含了运行java程序所必须的环境 JRE=JVM+java系统类库 2.3)JDK:java开发工具包

【Git 使用笔记】第二部分:基本命令 和 单分支开发

git 基本命令 git add . git commit -am "请填写你NB的备注" git fetch --all git push origin master:master git remote add origin 仓库地址 git remote rm origin git remote -v git rebase origin/master git rebase --continue git rebase --skip git rebase --abort ###举例仓库

Git学习笔记(六)分支管理

学习廖雪峰老师的Git教程的笔记,以供自己以后复习查看. ★★★★★ 创建.合并.删除分支.     ★创建分支 git branch branchName --------创建分支               git checkout branchName -----切换到分支           上面两条命令可以合并为:git checkout -b branchName 创建并切换到分支 ★合并分支               git merge branchName -------合并指

《Pro Git》笔记3:分支基本操作

<Pro Git>笔记3:Git分支基本操作 分支使多线开发和合并非常容易.Git的分支就是一个指向提交对象的可变指针,极其轻量.Git的默认分支为master. 1.Git数据存储结构和分支 git提交时会将暂存文件的内容,暂存的目录结构,提交对象,含附注标签对象都以包含信息头的二进制文件形式存储到版本库中(.git/objects目录),存储的对象以其自身SHA1值作为唯一标识,SHA1前两位为存储对象所在目录名,SHA1后38位为存储对象的文件名.存储的数据对象类型有: blob(文件内