ACM算法指导精品PPT课件
合集下载
ACM贪心算法.ppt

今年暑假不AC(2037)
• • Input 输入数据包含多个测试实 例,每个测试实例的第一 行只有一个整数 n(n<=100),表示你喜欢 看的节目的总数,然后是n 行数据,每行包括两个数 据Ti_s,Ti_e (1<=i<=n), 分别表示第i个节目的开始 和结束时间,为了简化问 题,每个时间都用一个正 整数表示。n=0表示输入 结束,不做处理。 Output 对于每个测试实例,输出 能完整看到的电视节目的 个数,每个测试实例的输 出占一行。 Sample Input 12 13 34 07 38 15 19 15 20 10 15 8 18 6 12 5 10 4 14 29 0 Sample Output 5
附:参考源码(HDOJ-1050)
#include <iostream> using namespace std; int main() { int t,i,j,N,P[200]; int s,d,temp,k,min; cin>>t; for(i=0;i<t;i++) { for(j=0;j<200;j++) P[j]=0; cin>>N; for(j=0;j<N;j++) { cin>>s>>d; s=(s-1)/2; d=(d-1)/2; } if(s>d) { temp=s; s=d; d=temp; } for(k=s;k<=d;k++) P[k]++; } min=-1; for(j=0;j<200;j++) if(P[j]>min) min=P[j]; cout<<min*10<<endl; } return 0;
《ACM递推求解》课件

2 How do recursive algorithms work?
递推算法通常由一个基本情况和一个递推关系组成。当问题达到基本情况时,递归过程 结束并返回结果。否则,递归算法将继续调用自身来解决较小的子问题。
3 What are some common examples of recursive algorithms?
Why are ACM递推 problems important?
ACM递推问题是计算机科学和编程中的重要部 分。通过解决这些问题,我们可以提高自己的 编程能力和算法思维,同时也可以应用递推算 法解决实际的问题。
递推算法基础知识
1 What is a recursive algorithm?
递推算法是一种通过不断调用自身来解决问题的算法。它可以将大问题分解成多个较小 的子问题,并通过解决子问题的方式来得到最终的解。
3 减少递归深度
通过优化递归算法的终止 条件和边界情况,可以减 少递归的深度,降低递归 算法的时间复杂度。
递推问题的时间复杂度分析
What is time complexity?
时间复杂度是用来衡量算法执行时间与输入规模之间关系的一种指标。它可以帮助我们评估 算法的效率和性能。
How to analyze the time complexity of a recursive algorithm?
总结与展望
1 递推算法的重要性
递推算法在算法设计和问题求解中起着重要的作用。通过掌握递推算法的基本知识和常 见求解方法,我们可以更好地解决问题并优化算法。
2 未来的发展方向
未来,随着计算机科学和技术的进步,递推算法将继续发展和创新,为解决更复杂的问 题提供更高效的求解方法。
《ACM递推求解》PPT课 件
递推算法通常由一个基本情况和一个递推关系组成。当问题达到基本情况时,递归过程 结束并返回结果。否则,递归算法将继续调用自身来解决较小的子问题。
3 What are some common examples of recursive algorithms?
Why are ACM递推 problems important?
ACM递推问题是计算机科学和编程中的重要部 分。通过解决这些问题,我们可以提高自己的 编程能力和算法思维,同时也可以应用递推算 法解决实际的问题。
递推算法基础知识
1 What is a recursive algorithm?
递推算法是一种通过不断调用自身来解决问题的算法。它可以将大问题分解成多个较小 的子问题,并通过解决子问题的方式来得到最终的解。
3 减少递归深度
通过优化递归算法的终止 条件和边界情况,可以减 少递归的深度,降低递归 算法的时间复杂度。
递推问题的时间复杂度分析
What is time complexity?
时间复杂度是用来衡量算法执行时间与输入规模之间关系的一种指标。它可以帮助我们评估 算法的效率和性能。
How to analyze the time complexity of a recursive algorithm?
总结与展望
1 递推算法的重要性
递推算法在算法设计和问题求解中起着重要的作用。通过掌握递推算法的基本知识和常 见求解方法,我们可以更好地解决问题并优化算法。
2 未来的发展方向
未来,随着计算机科学和技术的进步,递推算法将继续发展和创新,为解决更复杂的问 题提供更高效的求解方法。
《ACM递推求解》PPT课 件
ACM入门之三-位运算ppt课件

上面程序的输出结果是:
n1=78000,n2=-32768,n3=32768,c=c0,c<<4=3072
右移运算符
右移运算符“>>”是双目运算符。
其计算结果是把“>> ”的左操作数的各二进位全部 右移若干位后得到的值,要移动的位数就是“>>”的 右操作数。移出最右边的位就被丢弃。
对于有符号数,如long,int,short,char类型变量, 在右移时,符号位(即最高位)将一起移动, 并且大多数C/C++编译器规定,如果原符号位 为1,则右移时右边高位就补充1,原符号位为0, 则右移时高位就补充0。
右移运算符实例
#include <stdio.h> main() { int n1 = 15; short n2 = -15; unsigned short n3 = 0xffe0; unsigned char c = 15; n1 = n1>>2; n2 >>= 3; n3 >>= 4; c >>= 3; printf(
例如:表达式“21 | 18 ”的值是23(即二进制数 10111)。 按位或运算通常用来将某变量中的某些位置1或 保留某些位不变。 例如,如果需要将int型变量n的低8位全置成1, 而其余位不变,则可以执行:
n |= 0xff;
13
按位异或
按位异或运算符“^”是双目运算符。
功能:将参与运算的两操作数各对应的二进制位进 行异或操作,即只有对应的两个二进位不相同时, 结果的对应二进制位才是1,否则为0。
HDU3782xxx定律
/showproblem.php?pid=3782 Problem Description
acm 程序设计 ppt课件

{ f(i,j)=
f(i-1,j-1)+1 (a[i]==b[j]) max(f(i-1,j),f(i,j-1)) (a[i]!=b[j])
由于f(i,j)只和f(i-1,j-1), f(i-1,j)和f(i,j-1)有 关, 而在计算f(i,j)时, 只要选择一个合适 的顺序, 就可以保证这三项都已经计算出 来了, 这样就可以计算出f(i,j). 这样一直 推到f(len(a),len(b))就得到所要求的解了.
29 2020/5/11
二、动态规划的基本步骤
动态规划算法通常用于求解具有某 种最优性质的问题。在这类问题中,可 能会有许多可行解。每一个解都对应于 一个值,我们希望找到具有最优值(最 大值或最小值)的那个解。设计一个动 态规划算法,通常可以按以下几个步骤 进行:
30 2020/5/11
(1)找出最优解的性质,并刻画其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造一个
f[i] = max(f[i], f[j]+1) (1<=j<i,且Mice[i].W> Mice[j].W,Mice[i].S < Mice[j].S)
其中,初始条件为f[i]=1 (i=1, 2, ..., n)。
20 2020/5/11
Qestion:
两个问题有本 质区别吗?
21 2020/5/11
为(n-2)*2=4,而另外两条直线既可能平行也可能相交,因此可能交点
数为:
(n-2)*2+0=4 或者
(n-2)*2+1=5
4、 第四条直线不与任何一条直线平行,交点数为:
(n-3)*3+0=3 或者 (n-3)*3+2=5 或者 (n-3)*3+3=6
ACM培训精品PPT课件

OLE (Output Limit Exceed) 输出超界 (一般 不太常见,除非你输出了超过 1024K ...)
DP (Dynamic Programming) 动态编程,动 态规划
DFS (Depth First Search) 深度优先搜索
BFS (Breadth First Search) 宽度/广度优先搜 索
输入输出
%d %lld %lf自动扫描前导空格 比如:读入5个整数到A[5]
输入文件中,数的排布是这个样子
35 26 78
99
206
不管它,直接5次%d
for ( int i = 0; i < 5; i++ ) scanf(“%d”, A + i);
%lld用于输入和输出长整数(long long,64位) %lf用于输入输出double
cout<<"j="; printf("%d\n", j); } return 0; }
0
1
j=0 j=1 j=2 j=3
2 3 4 j=j=j=j=j=
j=4
输入输出
scanf
输入格式
%d %lld %c %s %lf
对每种格式搞清楚一个重要问题
是否自动跳过前导空白?
什么是空白:空格,TAB,回车
输入输出
%s 读一个字符串,自动扫描前导空白,读到 空白结束
如: abcd efgh,将读出”abcd”
%c读一个字符,但是不扫描前导空白
如何读一个非空白字符呢?
比如,读取某人的信息,其性别用M/F表示
TopBoy M ComputerScience
Kitty
DP (Dynamic Programming) 动态编程,动 态规划
DFS (Depth First Search) 深度优先搜索
BFS (Breadth First Search) 宽度/广度优先搜 索
输入输出
%d %lld %lf自动扫描前导空格 比如:读入5个整数到A[5]
输入文件中,数的排布是这个样子
35 26 78
99
206
不管它,直接5次%d
for ( int i = 0; i < 5; i++ ) scanf(“%d”, A + i);
%lld用于输入和输出长整数(long long,64位) %lf用于输入输出double
cout<<"j="; printf("%d\n", j); } return 0; }
0
1
j=0 j=1 j=2 j=3
2 3 4 j=j=j=j=j=
j=4
输入输出
scanf
输入格式
%d %lld %c %s %lf
对每种格式搞清楚一个重要问题
是否自动跳过前导空白?
什么是空白:空格,TAB,回车
输入输出
%s 读一个字符串,自动扫描前导空白,读到 空白结束
如: abcd efgh,将读出”abcd”
%c读一个字符,但是不扫描前导空白
如何读一个非空白字符呢?
比如,读取某人的信息,其性别用M/F表示
TopBoy M ComputerScience
Kitty
ACM课件(lecture03)递推求解-PPT文档资料43页

17.01.2020
21
思考题:平面分割方法
问题的提出: 设有n条封闭曲线画在平面上,而任
何两条封闭曲线恰好相交于两点,且任何 三条封闭曲线不相交于同一点,问这些封 闭曲线把平面分割成的区域个数。
17.01.2020
22
简单分析——
2 1
14 23
n=1 n=2
8 1
5
3
2
4
6
7
n=3
14
6
10 11 3 12 2
“佐罗”的烦恼
说起佐罗,大家首先想到的除了他脸上的面具 ,恐怕还有他每次刻下的“Z”字。我们知道, 一个“Z”可以把平面分为2部分,两个“Z”可 以把平面分为12部分,那么,现在的问题是: 如果平面上有n个“Z”,平面最多可以分割为几 部分呢? 说明1:“Z”的两端应看成射线 说明2:“Z”的两条射线规定为平行的
f(n)=f(n-1)+f(n-2)+f(n-3); 其中f(1)=1,f(2)=2,f(3)=4
17.01.2020
29
最后一个思考题(有点难度)
17.01.2020
30
分析过程(1)
设:F(n)表示n个人的合法队列,则:
按照最后一个人的性别分析,他要么是男, 要么是女,所以可以分两大类讨论:
17.01.2020
13
是不是这个——
F(1)=2; F(n) = F(n-1)+n;
化简后: F(n) = n(n+1)/2 +1;
17.01.2020
14
太简单了?
来个稍微麻烦一些的
17.01.2020
15
例:(2050)折线分割平面
ACM课件(lecture_08)-31页精选文档

ACM程序设计
上一周,
你
了吗?
2020/1/10
2
每周一星(7):
07054202
2020/1/10
3
第八讲
母函数及其应用
(Generation function)
2020/1/10
4
从递推关系说起
2020/1/10
5
研究以下多项式乘法:
(8-1)
可以看出:
x2项的系数a1a2+a1a3+...+an-1an中所有的项包括n个元 素a1,a2, …an中取两个组合的全体; 同理:x3项系数包含了从n个元素a1,a2, …an中取3 个元素组合的全体;
HDOJ_1398 Square Coins
Sample Input 2 10 30 0
Sample Output 1 4 27
2020/1/10
19
算法分析:
典型的利用母函数可解的题目。
G(x)=(1+x+x2+x3+x4+…)(1+x4+x8+x12 +…)(1+x9+x18+x27+…)…
2020/1/10
以此类推。
2020/1/10
6
特例:
若令a1=a2= …=an=1,在(8-1)式中 a1a2+a1a3+...+an-1an项系数中每一个组合有 1个贡献,其他各项以此类推。故有:
(8-2)
2020/1/10
7
母函数定义:
对于序列a0,a1,a2,…构造一函数:
称函数G(x)是序列a0,a1,a2,…的 母函数
上一周,
你
了吗?
2020/1/10
2
每周一星(7):
07054202
2020/1/10
3
第八讲
母函数及其应用
(Generation function)
2020/1/10
4
从递推关系说起
2020/1/10
5
研究以下多项式乘法:
(8-1)
可以看出:
x2项的系数a1a2+a1a3+...+an-1an中所有的项包括n个元 素a1,a2, …an中取两个组合的全体; 同理:x3项系数包含了从n个元素a1,a2, …an中取3 个元素组合的全体;
HDOJ_1398 Square Coins
Sample Input 2 10 30 0
Sample Output 1 4 27
2020/1/10
19
算法分析:
典型的利用母函数可解的题目。
G(x)=(1+x+x2+x3+x4+…)(1+x4+x8+x12 +…)(1+x9+x18+x27+…)…
2020/1/10
以此类推。
2020/1/10
6
特例:
若令a1=a2= …=an=1,在(8-1)式中 a1a2+a1a3+...+an-1an项系数中每一个组合有 1个贡献,其他各项以此类推。故有:
(8-2)
2020/1/10
7
母函数定义:
对于序列a0,a1,a2,…构造一函数:
称函数G(x)是序列a0,a1,a2,…的 母函数
c语言acm算法动态规划(1)精品PPT课件

27 11.10.2020
理论总结
28 11.10.2020
请回答: 穷举(暴力)方法的时间复杂度是多少?
17 11.10.2020
解决方案:
I 012 3 4 5 6 7 8 Num[I] 1 4 7 2 5 8 3 6 9
F[I] 1 2 3 2 3 4 3 4 5
18 11.10.2020
三、HDOJ_1160 FatMouse's Speed
题目链接
即n=4时,有0个,3个,4个,5个,6个不同交点数。
9 11.10.2020
从上述n=4的分析过程中,我们发现:
m条直线的交点方案数 =(m-r)条平行线与r条直线交叉的交点 数
+ r条直线本身的交点方案 =(m-r)*r+r条之间本身的交点方案数 (1<=r<=m)
10 11.10.2020
一、数塔问题
13 11.10.2020
拒绝暴力,倡导和谐~
14 11.10.2020
考虑一下:
从顶点出发时到底向左走还是向右走应取决 于是从左走能取到最大值还是从右走能取到最大 值,只要左右两道路径上的最大值求出来了才能 作出决策。
同样,下一层的走向又要取决于再下一层上 的最大值是否已经求出才能决策。这样一层一层 推下去,直到倒数第二层时就非常明了。
Sample Input 6008 1300 6000 2100 500 2000 1000 4000 1100 3000 6000 2000 8000 1400 6000 1200 2000 1900
Sample Output
4 4 5 9 7
19 11.10.2020
题目分析:
设Mice[i].W表示第i只老鼠的重量,Mice[i].S 表示第i只老鼠的速度。我们先对Mice进行排 序,以W为第一关键字,从小到大,S为第二 关键字,从大到小。
理论总结
28 11.10.2020
请回答: 穷举(暴力)方法的时间复杂度是多少?
17 11.10.2020
解决方案:
I 012 3 4 5 6 7 8 Num[I] 1 4 7 2 5 8 3 6 9
F[I] 1 2 3 2 3 4 3 4 5
18 11.10.2020
三、HDOJ_1160 FatMouse's Speed
题目链接
即n=4时,有0个,3个,4个,5个,6个不同交点数。
9 11.10.2020
从上述n=4的分析过程中,我们发现:
m条直线的交点方案数 =(m-r)条平行线与r条直线交叉的交点 数
+ r条直线本身的交点方案 =(m-r)*r+r条之间本身的交点方案数 (1<=r<=m)
10 11.10.2020
一、数塔问题
13 11.10.2020
拒绝暴力,倡导和谐~
14 11.10.2020
考虑一下:
从顶点出发时到底向左走还是向右走应取决 于是从左走能取到最大值还是从右走能取到最大 值,只要左右两道路径上的最大值求出来了才能 作出决策。
同样,下一层的走向又要取决于再下一层上 的最大值是否已经求出才能决策。这样一层一层 推下去,直到倒数第二层时就非常明了。
Sample Input 6008 1300 6000 2100 500 2000 1000 4000 1100 3000 6000 2000 8000 1400 6000 1200 2000 1900
Sample Output
4 4 5 9 7
19 11.10.2020
题目分析:
设Mice[i].W表示第i只老鼠的重量,Mice[i].S 表示第i只老鼠的速度。我们先对Mice进行排 序,以W为第一关键字,从小到大,S为第二 关键字,从大到小。
ACM培训课程算法设计课件

45
【例】编程求当N<=100时,N!的准确值 问题分析:问题要求对输入的正整数N,计算N!的准 确值,而N!的增长速度仅次于指数增长的速度,所以 这是一个高精度计算问题。 例如: 9!=362880 100! = 93 326215 443944 152681 699263 856266 700490 715968 264381 621468 592963 895217 599993 229915 608914 463976 156578 286253 697920 827223 758251 185210 916864 000000 000000 000000 000000
for(x=1;x<=20;x=x+1) for(y=1;y<=33;y=y+1) { z=100-x-y; if(z mod 3=0 and
5*x+3*y+z/3=100)
{print(the cock number is",x); print(the hen number is", y);
print(the chick number is "z);} }
而链表中按序号访问的时间性能O(n),所以如果经 常做的运算是按序号访问数据元素,显然顺序表优 于链表; 3)基于环境的考虑
顺序表容易实现,任何高级语言中都有数 组类型,链表的操作是基于指针的,操作简单。
34
【例3】一次考试共考了语文、代数和外语三科。某小组 共有九人,考后各科及格名单如下表,请编写算法找出
1)基于存储的考虑 顺序表的存储空间是静态分配的,在程
序执行之前必须明确规定它的存储规模,也就 是说事先对“MAXSIZE”要有合适的设定,过 大造成浪费,过小造成溢出。可见对线性表的 长度或存储规模难以估计时,不宜采用顺序表; 链表不用事先估计存储规模,但链表的存储密 度较低,
【例】编程求当N<=100时,N!的准确值 问题分析:问题要求对输入的正整数N,计算N!的准 确值,而N!的增长速度仅次于指数增长的速度,所以 这是一个高精度计算问题。 例如: 9!=362880 100! = 93 326215 443944 152681 699263 856266 700490 715968 264381 621468 592963 895217 599993 229915 608914 463976 156578 286253 697920 827223 758251 185210 916864 000000 000000 000000 000000
for(x=1;x<=20;x=x+1) for(y=1;y<=33;y=y+1) { z=100-x-y; if(z mod 3=0 and
5*x+3*y+z/3=100)
{print(the cock number is",x); print(the hen number is", y);
print(the chick number is "z);} }
而链表中按序号访问的时间性能O(n),所以如果经 常做的运算是按序号访问数据元素,显然顺序表优 于链表; 3)基于环境的考虑
顺序表容易实现,任何高级语言中都有数 组类型,链表的操作是基于指针的,操作简单。
34
【例3】一次考试共考了语文、代数和外语三科。某小组 共有九人,考后各科及格名单如下表,请编写算法找出
1)基于存储的考虑 顺序表的存储空间是静态分配的,在程
序执行之前必须明确规定它的存储规模,也就 是说事先对“MAXSIZE”要有合适的设定,过 大造成浪费,过小造成溢出。可见对线性表的 长度或存储规模难以估计时,不宜采用顺序表; 链表不用事先估计存储规模,但链表的存储密 度较低,
ACM培训精品PPT课件

自己过滤空格?麻烦!
输入输出
读一个非空白字符, 方法一:
char str[2]; scanf(“%1s”, str); // %1s扫描前导空白,并且只读一个字符 char c = str[0]; 方法二: 强制扫描空白 在%前面加上一个空格表示“强制扫描前导空白” scanf(“ %c”, &ch); 前面那个读人物信息的完整scanf语句:
LCS (Longest Common Subsequence) 最长 公共子串
输入输出
C:
scanf printf
C++:
cin cout
速度快 格式容易控制
使用简单, 自动识别类型 格式控制较麻烦
数据规模较大时, 推荐(必须)使用scanf 以 避免超时(TLE)
输入输出
cout: 带缓冲输出 printf: 不带缓冲输出
Ctrl+Z 2.最好不要把C和C++的输入输出语句混着用,会造成一些莫名其妙的问题 3.我个人倾向于使用纯C的输入输出,因为方便且速度快。
关于重定向操作
当程序要输入的内容很多时,从文件读入的操作变得非常重 要,特别是需要调试时,这样可以避免你反复的从键盘敲入重
复的内容。
使用标准输入语句,可以使用重定向命令行
scanf(“%s %c %s”, name, &gender, ability);
输入输出
同理,我们也可以用其它字符来扫描其它类型 的无关输入
比如,输入年月日的信息
2007-08-03 scanf(“%d-%d-%d”, &y, &m, &d); 其它类似
浮点数的输入问题
为什么说while(in!=0.00)不合理呢? 如果不合理应该怎么判断!!
ACM 入门精品PPT课件

2020/10/21
10
如何排名?
首先根据解题数目进行排名。 如果多支队伍解题数量相同,则根据总用时加上惩
罚时间进行排名。 总用时和惩罚时间由每道解答正确的试题的用时加
上惩罚时间而成。 每道试题用时将从竞赛开始到试题解答被判定为正
确为止,其间每一次错误的运行将被加罚20分钟时 间,未正确解答的试题不记时。
州);
2020/10/21
7
ACM in XTU
2004年,第一次参加亚洲区预选赛(网络预赛) 2005~2011,每年10月左右——
湖南省第1~6届大学生程序设计竞赛 2004~2010,每年10~12月——
第29~35届ACM国际大学生程序设计竞赛 亚洲区预选赛
2020/10/21
8
预期赛事(今后每年)
校程序设计竞赛
个人编程能力的比拼 中文或者英文题目,考察编程基本功
2020/10/21
13
ACM队队员的基本原则
基本要求
人品好 愿意花时间在这项赛事上 有团队合作精神
能力要求
程序设计 英语科技文献阅读
数学
2020/10/21
14
开课目的
为湘大ACM代表队培养后备人才 提高分析问题和应用计算机编程解决
ACM
第一讲
ACM入门
(Introduction to ACM)
2020/10/21
2
第一部分
ACM简介
2020/10/21
What is ACM ?
ACM-(Association for Computing Machinery)
成立于计算机诞生次年,是目前计算 机学界中历史最悠久、最具权威性的 组织…
ACM讲课之二分图匹配(匈牙利算法)ppt课件

1
1
1
2
2
3
323Fra bibliotek44
5
可编辑课件PPT
5
11
i = 3时: Pre[1] = 3;
1 2 3 4 5
可编辑课件PPT
1 1
2
3
4
5
12
i = 4时 : Pre[3] = 2; Pre[2] = 1; Pre[5] = 3; Pre[1] = 4;
1 2 3 4 5
可编辑课件PPT
1 2 3 4
匹配1
v1
v2
v3
匹配2
v1
v2
v3
v4
v5
v4
v5
可编辑课件PPT
3
二分图的最大匹配
最大匹配:图中包含边数最多的匹配称为图的最大匹配。
今天我要讲的是无权二分图的最 大匹配问题,采用匈牙利算法。
可编辑课件PPT
4
匈牙利算法必备知识:
1.盖点:有被M中的边关联到的节点,未盖点则相反。
2.增广路径:若二分图中有一条路径p,其起始点和结束点都是未盖 点,其间属于M的边和不属于M的边交替出现,则称路径p是一条关于 M的增广路径。
5
13
二分图最大匹配延伸
最小点覆盖 最小边覆盖 最大独立集 有向图最小路径覆盖 最优匹配(KM算法)
可编辑课件PPT
14
此课件下载可自行编辑修改,此课件供参考! 部分内容来源于网络,如有侵权请与我联系删除!感谢你的观看!
匈牙利算法: 计算二分图最大匹配就是应用增广路径的概念,每次寻找一条关于M 的增广路径p,通过M和增广路径进行异或,使得M中的匹配数增加1 。以此类推,直至二分图中不存在关于M的增广路径为止。此时得到 匹配M就是图G的一个最大匹配。
ACM算法 计算几何基础ppt课件

57 2020/4/15
58 2020/4/15
59 2020/4/15
60 2020/4/15
61 2020/4/15
62 2020/4/15
63 2020/4/15
64 2020/4/15
特别提醒:
以上介绍的线段的三个属性, 是计算几何的基础,在很多方 面都有应用,比如求凸包等等, 请务必掌握!
15 2020/4/15
第二单元
多边形面积 和重心
16 2020/4/15
基本问题(1):
给定一个简单多边形,求其 面积。
输入:多边形(顶点按逆时 针顺序排列)
输出:面积S
17 2020/4/15
A=sigma(Ai) (i=1…N-2)
P1
A1 P2
P6 A4
P5 A3
A2 P4
P3
25 2020/4/15
凹多边形的面积?
P3
P2 P4
P1
26 2020/4/15
依然成立!!!
多边形面积公式:A=sigma(Ai) (i=1…N-2)
结论: “有向面积”A比“面积”S其实更本
质!
27 2020/4/15
思考如下图形:
18 2020/4/15
Any good idea?
19 2020/4/15
先讨论最简单的多边形——三角形
20 2020/4/15
三角形的面积:
在解析几何里, △ABC的面积可以通过 如下方法求得:
点坐标 => 边长 => 海伦公式 => 面积
21 2020/4/15
思考:此方法的缺点:
C=sigma((↑Pi +↑Pi+1)(↑Pi ×↑Pi+1) ) /(6A)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章
算法设计常用到的基本策略
程序的灵魂
数据结构+算法=程序 算法设计思想 算法分析:从时空、适用范围来分析,重点考
虑时间效率和空间开销 复杂度分析 复杂度等级:多项式算法、指数级算法 五个重要的策略:
一 对应的策略
将问题对应成另一个易于思考的问题 A问题->B问题 B有现成算法,从而求解
<算法设计与分析>课程学习方法
1. 课堂精讲,课外多练,参考题解,精做(解 题)报告,提高程序设计能力,提高程序调 试能力,提高算法分析和优化能力;
2. 基本作业: SICILY上完成指定题目,完成典 型题目的解题报告
<算法设计与分析>课程学习方法
3.考试:ACM方式,网上自动测评,诚信是IT人立足之本! CS: (04级175人:10题2人, 9题
人,8:2,7:4,6:19,5:19,4:30,3:24,2:53, 1:8,0:11; 05级99人:8题2人,7题3人,6题2人,5题2人,4 题
8人,3题15人,2题35人,1题21人,0题11人; 06级105人:7题5人,6题3人,5题9人,4 题16人,3
题33人,2题16人,1题14人,0题11人) SS:06、07级185人( 7题4人,6题3人,5题4人,4
题3人,3题21人,2题41人,1题52人,0题57人)
<算法设计与应用>课程学习方法
Cs07:178人 8题1人,7题5人,6题10人,5题24人,4 题53人,3题31人,2题28人,1题14人,0题12人;
3.作业扩展内容:中大OJ 、国内OJ,每周一赛题目; 4.主要OJ:
Poj : http://
一 对应的策略
例1.1 哥尼斯堡七桥问题(一笔画问题,七桥四块陆地) 从一块陆地出发,每次过一桥,且只能过一次,最后回到出发
点,问是否存在这样的途径 哥尼斯堡七桥问题->欧拉回路 结论:从图上的一点出发又回到该点,连接该点的线(边)必
须是偶数才能满足条件。 而七桥问题中,所有定点的度(连结边的条数)皆为奇数,故
无解
一 对应的策略
例1.2
一种游戏,给出n(n为自然数),然后给 出2n个自然数,例如n=4,2n=8个数是 7 9 3 6 4 2 5 3,游戏双方为A,B(计 算机)只允许从给出数列的两头取数, 以取完数之和最大者为胜,A可以先取, 如两者和相等仍算A胜
一 对应的策略
方案1 第一步 A取7 B取9 余3 6 4 2 5 3 第二步 A取右3 B取5 余3 6 4 2 第三步 A取2 B取4 余3 6 第四步 A取6 B取3 结果:A=7+3+2+6=18 A输 B=9+5+4+3=21
的分析和改进.
本课程学习方法
教材 [1] 刘汝佳、黄亮,《算法艺术与信息学竞赛》(第1
版),北京:清华大学出版社,2004,ISBN 7-30207800-9
[2] Thomas H.Cormen;Charles E.Leiserson;Ronald L.Rivest;Clifford Stein. Introduction to Algorithms, 2th Ed. The MIT Press, 2001, ISBN 978-0-262-33293-3 影印版:《算法导论》(第二版),北京:高等教 育出版社,2007,ISBN 978-7-040-11050-0 中译版:潘金贵等译,《算法导论》(第2版),北 京:机械工业出版社,2006,ISBN 7-111-18777-6
7.《国际大学生程序设计竞赛例题解(七)》中 山大学ICPC集训队内部选拔赛试题(20052006), 郭嵩山、刘祖立、刘曦、涂德健著 电 子工业出版社 2010.7
本课程学习方法
大餐后的甜品(学完本课程后选读,面试须 读) 8.由几个年轻的微软软件工程师著:编程之
美—微软技术面试心得 电子工业出版社 2008 . 3
5.《国际大学生程序设计竞赛例题解(五)》广 东省大学生程序设计竞赛试题(2006-2007), 郭 嵩山、张子臻、王磊、汤振东著 电子工业出 版社 2008.11
本课程学习方法
6. 《国际大学生程序设计竞赛例题解(六)》 广东省大学生程序设计竞赛试题(20.5
Zou :
本课程学习方法
Usaco: Ural : Uva : Ceoi :
本课程学习方法
5.解题报告格式:
① 原题中文大意; ② 算法思想及解题用到的主要数据结构; ③ 详细解题思路; ④ 逐步求精算法描述(含过程及变量说明); ⑤ 程序注释清单(重要过程的说明); ⑥ 测试数据(5-10组有梯度的测试数据,要考虑边界条件); ⑦ 对时间复杂度,空间复杂度方面的分析、估算及程序优化
一 对应的策略
观察2n个数,奇偶为上述数之和有大小之分, 取偶数位位置可获胜 ①②③④⑤⑥⑦⑧ 7 93 64 2 53
A取 3 9 2 6 A胜 B取7 5 4 3 取数问题对应成按奇偶对应规则取数可获问题解
一 对应的策略
方案2 第一步 A取7 B取9 余3 6 4 2 5 3 第二步 A取左3 B取6 余4 2 5 3 第三步 A取4 B取2 余5 3 第四步 A取5 B取3 结果:A=7+3+4+5=19 A输 B=9+6+2+3=20
本课程学习方法
参考资料 1. 《国际大学生程序设计竞赛辅导教程》 郭嵩
山、崔昊、吴汉荣、陈明睿编著 北京大学出 版社 2000.12 2. 《国际大学生程序设计竞赛例题解(一)》 数论、计算几何、搜索算法专集,郭嵩山、李 志业、金涛、梁锋编著 电子工业出版社 2006.5
本课程学习方法
3.《国际大学生程序设计竞赛例题解(二)》广 东省大学生程序设计竞赛试题(2003-2005), 郭 嵩山、黎俊瑜、林祺颖著 电子工业出版社 2006.5
4. .《国际大学生程序设计竞赛例题解(三)》 图论、动态规划算法、综合题专集, 郭嵩山、 关沛勇、蔡文志、梁锋编著 电子工业出版社 2007.7
本课程学习方法
4. 《国际大学生程序设计竞赛例题解(四)》 广东省信息学奥林匹克竞赛试题(2003-2006), 郭嵩山、张惠东、林祺颖、莫瑜著 电子工业 出版社 2008.2