![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
中国大学MOOC 程序设计与算法(二) 算法基础
TZR986981442
这个作者很懒,什么都没留下…
展开
-
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][动态规划] 最长上升子序列
动态规划思路Created with Raphaël 2.2.0开始递归式的思考:将原问题分解为子问题设置保存子问题的解的机制明确状态空间确定初始状态确定状态转移方程结束题目分析找子问题想法1:求序列前n个元素的最长上升子序列的长度这个子序列中,可能会有多个长度为n的上升子序列,对于一下元素,有些序列的最后一个元素比下一个元素小,有些比下一个元素大,导致问题的解依赖于达到当前状态的路...原创 2020-03-31 11:09:16 · 227 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][动态规划] 数字三角形
题目第一个想法:递归这个问题满足递归的结构,本质上相当于深度优先遍历一个二叉树,没什么难度,直接给出代码,时间复杂度为O(n!)O(n!)O(n!)代码#include<iostream>#define MAXAMOUNTOFROWS 100using namespace std;int numberTriangle[MAXAMOUNTOFROWS][MAXAMOUNT...原创 2020-03-30 22:18:50 · 269 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 布尔表达式
题目描述The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:Expression: ( V | V ) & F & ( F | V )where V is for True, and F is for Fa...原创 2020-02-26 15:30:27 · 233 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归][枚举] 算24
题目分析本题目本质上是穷举法代码#include<iostream>#include<cmath>using namespace std;bool function(float* number, int n){ if(n==1){if(abs(*number-24)<1e-6) return true;} else{ float temp[n-...原创 2020-02-26 11:46:37 · 161 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 放苹果
题目分析假设有m个果子n个盘子,如果盘子的数目比果子多,则一定有n-m个盘子;否则,分苹果的方法数可以分为盘子有空的和无空的情况。用数学语言表达if n>m,function(m,n)=function(m,m);if\ n>m,function(m,n)=function(m,m);if n>m,function(m,n)=function(m,m)...原创 2020-02-26 11:46:49 · 157 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 爬楼梯
题目代码#include<iostream>using namespace std;int function(int stair){ if(stair <= 1) return 1; else{ int result; result = function(stair-1); result += function(stair-2); return re...原创 2020-02-26 11:46:59 · 186 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 表达式求值
题目输入四则运算表达式,仅由数字、+、-、*、/、(、)组成,没有空格,求表达式的值,假设运算结构都是整数。分析#include<iostream>using namespace std;int expression();int term();int factor();int factor(){ char character; int result; if((...原创 2020-02-26 11:47:42 · 216 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 全排列
题目描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。输入输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。...原创 2020-02-26 11:48:25 · 212 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 汉诺塔
代码#include <stdio.h>void Hanoi(int n, char from, char tmp, char to){ if(n == 1) printf("%c --> %c\n", from, to); else{ Hanoi(n-1, from, to, tmp); Hanoi(1, from, tmp, to); Hanoi(n-1,...原创 2020-02-26 11:48:05 · 242 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 逆波兰表达式
代码#include <iostream>using namespace std;double realnumber(char* String){ int ptr; double temp, result=0; for(ptr=0; (String[ptr]!='.')&&(String[ptr]!=0); ptr++); for(int cnt=ptr-...原创 2020-02-26 11:48:14 · 162 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][递归] 简单的整数划分
题目描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。输入标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。输出对于每组测试数据,输出N的划分数。样...原创 2020-02-26 16:23:23 · 141 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][二分算法] 农夫和奶牛
题目分析本题的解空间是[1,(109+1)−1C−1]⋂Z[1,\frac{(10^9+1)-1}{C-1}]\bigcap{Z}[1,C−1(109+1)−1]⋂Z(这里老师在课上讲的区间是[1,109C][1,\frac{10^9}{C}][1,C109],考虑有两头牛,牛舍在000和10910^9109的位置都存在,那么这个最大距离就应当是109−01\frac{10^9-0}{1...原创 2020-03-05 09:12:40 · 602 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][二分算法] 派
题目我的生日要到了!根据习俗,我需要将一些派分给大家。我有N个不同口味、不同大小的派。有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成;可以是一整个派)。我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨。因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好。当然,我也要给自己留一块,而这一块也要和...原创 2020-03-05 12:03:47 · 308 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][二分算法] 月度开销
题目描述农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。约翰打算为连续的M (1 ≤ M ≤ N) 个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。约翰的目标是合理安排每个fajo月包含的天数,使得开...原创 2020-03-05 17:18:14 · 290 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][归并][归并排序] 输出前k大的数
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB描述给定一个数组,统计前k大的数并且把这k个数从大到小输出。输入第一行包含一个整数n,表示数组的大小。n < 100000。第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。第三行包含一个整数k。k < n。输出从大到小输出前k...原创 2020-03-19 10:45:03 · 205 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][归并][归并排序] 求逆序数
题目描述在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务。对于不同的排名结果可以用逆序来评价它们之间的差异。考虑1,2,…,n的排列i1,i2,…,in,如果其中存在j,k,满足 j < k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序。一个排列含有逆序的个数称...原创 2020-03-19 13:32:11 · 396 阅读 · 0 评论 -
[笔记][中国大学mooc][程序设计与算法(二) 算法基础][枚举] POJ1013 称硬币
题目代码#include <stdio.h>//判断硬币coin是否存在于这四枚硬币string[4]之中int IsHere(char coin, char string[]){ int cnt; for(cnt = 0; cnt < 4; cnt++) if(string[cnt] == coin) return 1; return 0;}//假设硬币c...原创 2020-02-26 11:46:13 · 249 阅读 · 0 评论