ACM培训材料PPT课件
合集下载
ACM培训幻灯片90PPT课件
数量
生产部门
工工工单单单--品-品品号号号((B(B)B)) 数量
材料M 10吨,工时100,机时200…… 材料H 12吨,工时85,机时80……
仓库
产出-工时 产出-机时
作业车间1 作业车间2
产出-面积 产出-重量
作业车间3
财务部门
1.成本分析与评价 2.持续改善 3.成本控制
系统整体概览
综合解说
当考虑固成 对本 象定成本时,应考虑总归集成本,只要总2的.将成归本成集,分的本配与给成成本本对对象象有。间接联系
分配依不据随作业或数量水平的变动而变动就是固定成本。
分配因子
➢ 直接成本 ➢ 间接成本 ➢ 变动成本 ➢ 固定成本 ➢ 其他
产品 服务 流程 资产(机器) ……
分派
追溯
分配
与某个特定成本对象相联系,并 能以经济可行(成本效益原则)的 方式追溯到该成本对象。
成本术语
➢ 成本
成本
➢ 成本对象
➢ 成本归集
会计师们为达到某一特定目的而耗用或放弃的资源。
管理人员进行决策,需要知道某个 特定事项的成本是多少,我们把这 些“事项”称为【成本对象】。
会计系统以有组织的方式进行 成本数据的收集。例如购买卷 纸以印杂志的出版商……
➢ 成本分派 追溯 分配
1.将归集的与成本对象有直接联系 的成本,追溯到成本对象。
综合解说
成本目标控制 客户困境 ACM12..评 产价 品产 定品价对企业利润的贡献 34..接 管企单 理业决 损成策益本表分析政策 企业成本项目信息
产品成本项目信息
导入成本目标
综合解说
成本目标控制 客户1.困评价境产品对企业利润的贡献 ACM23..产 接品 单定 决价 策 4.企管理业损成益本表分析政策 企业成本项目信息 产品成本项目信息 导入成本目标
《ACM新生培训讲座》PPT课件
h
10
约瑟夫环问题一
剩下的n个人还是一个新的约瑟夫环问题。
1 2 3 4 … n-1 3 5 7 9 … 2n-1
n 2n+1
J(2n+1)=2*J(n)-1
h
11
约瑟夫环问题一
综上,我们可以得到如下递推公式:
该问题可以在O(n)的复杂度解决。
h
12
约瑟夫环问题一hΒιβλιοθήκη 13约瑟夫环问题一
h
18
h
6
约瑟夫环问题一
h
7
约瑟夫环问题一
当有偶数个人的时候,我们假设为2n个人, 经过第一圈之后还剩下n个人。
h
8
约瑟夫环问题一
剩下的n个人又是一个新的约瑟夫环问题。
1 2 3 4 … n-1 1 3 5 7 … 2n-3
n 2n-1
J(2n)=2*J(n)-1.
h
9
约瑟夫环问题一
当有奇数个人的时候,我们假设为2n+1个人, 经过第一圈之后还剩下n+1个人。去掉2n之后, 下一个要去掉的就是1,最后还是剩下n个人。
h
4
约瑟夫环问题一
问题描述:编号从1到n的n个人站成一个 环,从第一个人开始,每数到 2的时候, 去除该位置上的人,直到只剩下一个人, 求剩下的这个人的编号。
我们用J(n)表示人数为n的时候的解。
h
5
约瑟夫环问题一
去掉的人的编号依次为2,4,6,8,10,3,7,1,9,最 后只剩下5,所以J(10)=5。
h
2
Flavius Josephus
《犹太战记》(War of the Jews) 《约瑟夫自传》(The Life of Flavius
《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课件
{ 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新生培训讲座》课件
准备。
培训内容和安排
1
第一周️数据Leabharlann 型和控制结构2第二周️
高级编程概念和技巧
3
第三周️
竞赛策略和实践
4
第四周️
代码审查和提高
参与者的期望和要求
自律
求知
依靠自己的学习热情和时间管理技能。
有意愿和激情学习计算机科学和解决问题的能力。
团队合作
积极
愿意搭档工作和合作成为更棒的程序员。
积极主动并主动学习并与讲师和同学互相学习交
ACM新生培训讲座
欢迎来到ACM新生培训!在这个讲座中,我们将带领你了解计算机科学和
ACM组织,帮助你启动成功的计算机科学生涯。
培训目的和重要性
1
提高技能
2
培养领导力
3
扩大交际圈
教授核心计算机科学知识和
帮助学生提高领导力和团队
拓展社交网络,与其他志同
编程技能,为ACM竞赛做好
合作能力。
道合的人一起成长。
流。
讲座的互动环节
讨论小组
编程挑战
团队协作
和同学们小组工作讨论和交流你在
接受挑战并在最短时间内解决计算
和其他团队一起展示你的技能和代
计算机科学上的思考。
机科学难题。
码。
讲座结束的总结和展望
总结✔️
展望️
回顾所学知识和数字,并讨论学习惊喜和收获。
提供ACM组织入门,推荐其他不同领域的学习,开放
一个继续学习计算机科学的交流平台。
答疑和交流环节
"如果你想要更多的培训,我们可以探讨额外计算机科学的资源和帮助。"
欢迎提出你的问题和超越讲座中提到的主题的任何新的想法!让我们一起共同学习和成长。
ACM材料(共13张)
根据设定的哈希函数 H(key) 和所选中的 处理冲突的方法,将一组关键字映象到一个 有限的、地址连续的地址集 (区间) 上,并 以关键字在地址集中的“映象”作为相应记 录在表中的存储位置,如此构造所得的查找 表称之为“哈希表”。
第6页,共13页。
对数字的关键字可有下列构造方法:
1. 直接定址法
第4页,共13页。
2006厦门大学
2)对于不同的关键字可能得到同一哈希地址,
即:
key1 key2,而 f(key1) = f(key2)。 这种现象称冲突。
3) 很难找到一个不产生冲突(chōngtū)的哈希函 数。一般情况下,只能选择恰当的哈希函 数,使冲突(chōngtū)尽可能少地产生。
第5页,共13页。
第10页,共13页。
实际造表时,采用何种构造哈希函 数的方法取决于建表的关键字集合的情 况(包括关键字的范围和形态),总的原
则(yuánzé)是使产生冲突的可能性降到尽可能
地小。
第11页,共13页。
“处理冲突” 的实际含义是:
为产生冲突的地址寻找下一个哈希地址
1. 开放定址法
2. 链地址法
第12页,共13页。
第8页,共13页。
以关键字的平方值的中间几位作为存储地 址(dìzhǐ)。求“关键字的平方值” 的目的是“扩 大差别” ,同时平方值的中间各位又能受到 整个关键字中各位的影响。
第9页,共13页。
设定哈希函数为:
H(key) = key MOD p 其中, p≤m (表长) 并且
p 应为不大于 m 的素数
为产生 冲突的地址 (chǎnshēng) H(key) 求得一
个地址序列:
H0, H1, H2, …, Hs 其中:H0 = H(key)
ACM竞赛PPT辅导
10
2013-7-25
解法
#include <stdio.h> int main() { int n,sum; int i; int a; while(scanf("%d",&n)!=EOF&&n!=0){ sum = 0; a = 0; for(i = 0;i < n;i++){ scanf("%d",&a); sum += a; } printf("%d\n",sum); } return 0; }
共用体变量的引用方式 只有先定义了共用体变量才能引用它,而且不能引用共 用体变量,而只能引用共用体变量中的成员
例如:前面定义了a、b、c为共用体变量
a.i (引用共用体变量中的整型变量i) a.ch(引用共用体变量中的字符变量ch) a.f (引用共用体变量中的实型变量f)
32
共用体
22
结构体变量的引用
引用结构体变量中成员的方式为 结构体变量名.成员名 例 如 , student1.num表 示student1 变量中的 num成员,即student1的num(学号)项。可以对变 量 的 成 员 赋值 , 例 如 :student1.num=10010;“.” 是成员(分量)运算符,它在所有的运算符中优先 级最高,因此可以把student1.num作为一个整体 来看待。上面赋值语句的作用是将整数10010赋 给student1变量中的成员num。
87.5 Beijing
100101 Li Fun
17
概述
声明一个结构体类型的一般形式为: struct 结构体名 {成员表列}; 结构体名
2013-7-25
解法
#include <stdio.h> int main() { int n,sum; int i; int a; while(scanf("%d",&n)!=EOF&&n!=0){ sum = 0; a = 0; for(i = 0;i < n;i++){ scanf("%d",&a); sum += a; } printf("%d\n",sum); } return 0; }
共用体变量的引用方式 只有先定义了共用体变量才能引用它,而且不能引用共 用体变量,而只能引用共用体变量中的成员
例如:前面定义了a、b、c为共用体变量
a.i (引用共用体变量中的整型变量i) a.ch(引用共用体变量中的字符变量ch) a.f (引用共用体变量中的实型变量f)
32
共用体
22
结构体变量的引用
引用结构体变量中成员的方式为 结构体变量名.成员名 例 如 , student1.num表 示student1 变量中的 num成员,即student1的num(学号)项。可以对变 量 的 成 员 赋值 , 例 如 :student1.num=10010;“.” 是成员(分量)运算符,它在所有的运算符中优先 级最高,因此可以把student1.num作为一个整体 来看待。上面赋值语句的作用是将整数10010赋 给student1变量中的成员num。
87.5 Beijing
100101 Li Fun
17
概述
声明一个结构体类型的一般形式为: struct 结构体名 {成员表列}; 结构体名
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暑期培训资料(ppt28张)
大整数除法
1、链接地址
/problem?id=2737
2、问题描述
– 求两个大的正整数相除的商
输入数据
第1 行是测试数据的组数n,每组测试数据占2 行,第1 行是被除数,第2 行是除数。每组测试数据之间有一个空 行,每行数据不超过100 个字符
输出要求
n 行,每组测试数据有一行输出是相应的整数商
规律:一个数的第i 位和另一个数的第j 位相乘所得的数,一 定是要累加到结果的第i+j 位上。这里i, j 都是从右往左,从 0 开始数。
POJ2389 参考程序
#include<iostream> #include<string> using namespace std; const int MAXLEN=200+10; int a[MAXLEN],b[MAXLEN]; int c[2*MAXLEN]; string st1,st2; int i,j,k; //字符串s转换为整型数组t void tran(string s,int *t) { int m,l; l=s.length(); for(m=0;m<l;m++) t[m]=s[l-1-m]-'0'; }
//下面判断p1 是否比p2 大,如果不是,返回-1 if( nLen1 == nLen2 ) { for( i = nLen1-1; i >= 0; i -- ) { if( p1[i] > p2[i] ) break; //p1>p2 else if( p1[i] < p2[i] ) return -1; //p1<p2 } } for( i = 0; i < nLen1; i ++ ) { //要求调用本函数确保当i>=nLen2 时,p2[i] = 0 p1[i] -= p2[i]; if( p1[i] < 0 ) { p1[i]+=10; p1[i+1] --; } } for( i = nLen1 -1 ; i >= 0 ; i-- ) if( p1[i] )//找到最高位第一个不为0 return i + 1; return 0;//全部为0,说明两者相等 }
acm 程序设计 ppt课件
数为:
(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
即n=4时,有0个,3个,4个,5个,6个不同交点数。
9 2020/10/6
从上述n=4的分析过程中,我们发现:
29 2020/10/6
二、动态规划的基本步骤
动态规划算法通常用于求解具有某 种最优性质的问题。在这类问题中,可 能会有许多可行解。每一个解都对应于 一个值,我们希望找到具有最优值(最 大值或最小值)的那个解。设计一个动 态规划算法,通常可以按以下几个步骤 进行:
30 2020/10/6
(1)找出最优解的性质,并刻画其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造一个
三、动态规划问题的特征
动态规划算法的有效性依赖于问题本身所具 有的两个重要性质:
1、最优子结构:当问题的最优解包含了其子 问题的最优解时,称该问题具有最优子结构性质。
2、重叠子问题:在用递归算法自顶向下解问 题时,每次产生的子问题并不总是新问题,有些 子问题被反复计算多次。动态规划算法正是利用 了这种子问题的重叠性质,对每一个子问题只解 一次,而后将其解保存在一个表格中,在以后尽 可能多地利用这些子问题的解。
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 2020/10/6
三、HDOJ_1160 FatMouse's Speed
ACM暑期培训课程图论.ppt
E问题
OUTPUT FORMAT
输出应当有F+1行,每行一个整数,依次表示路径经 过的顶点号。注意数据可能有多组解,但是只有上面题目 要求的那一组解是认为正确的。
SAMPLE OUTPUT(fence.out) 1 2 3 4 2 5 4 6 5 7
E问题
很显然,这是一个欧拉路径问题,我们要做的就是读入栅栏的 构图后,找到图中的一条欧拉路径。
图的连通性
4. 有向图的强连通分支
在下面的几页中,我们可以看到求图的 强连通分支的实例。
首先,图(a)为有向图G,其中的阴影部 分是G的强连通分支,在对图G进行DFS 的过程中,我们对每个顶点都标出了其 开始搜索时刻preOrder与完成时刻 postOrder,黑色边为DFS搜索树树枝;
可以看到,图G共有 4个强连通分支:
{a,b,e}
{c,d}
{f,g}
{h}
图的连通性
4. 有向图的强连通分量
(b)图中G的转置图G*。图中说明了求 强连通分支算法第3部计算出的深度优 先树,其中黑色边是树枝。每个强连通
子图对应于一棵深度优先树。图中黑色 顶点b,c,g和h是强连通子图中每个顶点 的祖先,这些顶点也是对G*进行深度 优先搜索所产生的深度优先树的树根。
int map[MAXV][MAXV]; //map[i][j]记录顶点i和顶点j之 间的路径数目
int deg[MAXV]; int path[MAXE]; 径
//deg[i]记录顶点i的度数 //path数组用来存放找到的欧拉路
int fn,minv,maxv,pathnum=0; //minv为顶点最小编号,maxv为顶点最大编号
G有欧拉回路(G为欧拉图):G连通,G中均为偶度顶点。
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,…的 母函数
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培训03-动态规划
p( q+1,r,k-1 )
d ( l , q )= s[l] s[l+1]…s[q]
q的变化范围:从q+1到r之间所包含 的数字个数应大于k-1(乘号个数)。
r-(q+1)+1>k-1 q<r-k+1
p( l,r,k )=max{ d( l, q ) * p( q+1, r ,k-1 ) }
状态转移方程:用数学公式描述与阶段相 关的状态间的演变规律。
动态规划是运筹学的一个重要分支,是解 决多阶段决策过程最优化的一种方法。
所谓多阶段决策过程,是将所研究的过程 划分为若干个相互联系的阶段,在求解 时,对每一个阶段都要做出决策,前一 个决策确定以后,常常会影响下一个阶 段的决策。
动态规划所依据的是“最优性原理”。
显然,要依照上述递推过程求解,需要倒 过来,从P(P)出发,先求出第一阶段的P(O) 和P(N),再求第二阶段的P(K),P(L), P(M);……,最后得到P(A)。
3. 选择数据结构,将每条路经的长度存在数 组中。
东西方向上的道路长度存在两维数组h[4][3]中规 定数组的第一维为行号,第二维为列号。
10 动态规划
任务:
P是出发点,从P到A,求最短路径(图1)
G
3 D 1B 2
A
1
2
2
3
K
3 H
4 E
5
4
1
2
N
2 L
1 I
4
2
2
3
3
2
3
C
4
阶段5
F
4 阶段4
P
O
M
J
阶段1
阶段2 阶段3
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
2020/10/13
7
注意上面程序的M的好处
上面M定义为10000,这样不仅提高了效率而 且也节省了空间
如果要你把N阶乘转成2或3进制你会吗? 如:把18!转换成2进制. 如果你不会,那么你还没对那个程序M深刻
理解.
2020/10/13
8
N!末尾有多少个0
很简单,只要N!有多少个5这个因子,就有多少 个0.
进位e=0 (e=(a[1]+b[1]+e)/10) c[2]=(a[2]+b[2])%10+e=0, 百位进位e=1,依次下去,
最后把数组输出就是结果(要倒过来输出)
2020/10/13
4
对上面例子的实现
#include<stdio.h>
#include<string.h>
#define N
{
p=a[i]+b[i]+e;
c[i]=p%10;
e=p/10;
}
lc=lb;
while(e>0)
{
lc++;
c[lc]=e%10;
e/=10;
}
for(i=lc;i>=0;i--)
{
printf("%d",c[i]);
}
printf("\n");
return 0;
}
2020/10/13
5
用高精度算N阶乘
汇报人:XXXX 日期:20XX年XX月XX日
11
详细见课堂分析.
2020/10/13
9
fjnu:1743 fjnu:1185 fjnu:1307 fjnu:1191 fjnu:1158
作业
2020/10/13
10
谢谢您的指导
THANK YOU FOR YOUR GUIDANCE.
感谢阅读!为了方便学习和使用,本文档的内容可以在下载后随意修改,调整和打印。欢迎下载!
2020/10/13
3
用数组实现高精度加法
如果我们要对两个数:876521445544和 5555465445454进行相加
先定义两个数组,a,b表示这两个数,然后用数组c来 存结果
a[0]=4,a[1]=4,a[2]=5,…….
b[0]=5,b[1]=5,b[2]=5,……. c[0]=(a[0]+b[0])%10=9 个位e=0 c[1]=(a[1]+b[1])%10+e=9 +e为前一位的进位, 十位
int main()
{
int i,lc;
int a[128]={4,4,5,5,4,4,1,2,5,6,7,8,0},la=11;
int b[128]={4,5,4,5,4,4,5,6,4,5,5,5,5,0},lb=12;
int c[128]={0};
int e=0,p;
for(i=0;i<=lb;i++)
q=d[j]*i+p;
d[j]=hile(p>0){
2020/10/13
6
t++;
d[t]=p%M;
p/=M;
}
}
printf("%d",d[t]);
for(i=t-1;i>=1;i--)
printf("%04d",d[i]);
printf("\n");
}
return 1;
2020/10/13
2
如何用数组来表示高精度
有如下一个大数如: 12354564646456
我们这样用数组表示: 数组下标小的存数位权重低的(即反过来存) 假如我们数组的每一个变量只存一位(即可 认为是一个十进制模拟) 我们用数组int d[20]在存:
d[0]=6,d[1]=5,d[2]=4,d[3]=6,d[4]=4,……..
ACM培训材料
高精度加法 用高精度算N阶乘 N!0
2008-7-13
2020/10/13
1
高精度加法
我们知道计算机表示范围很有限,在VC中 int -231~231-1 最多可表示10位 double 虽然可以表示范围可到38位,但是有 效位也只有15~16位
如果我们要对几百位的整数要加,怎么 办.这就是我这节要讲的内容.我们可以 用数组来模拟高精度.
#include<stdio.h>
#define M 10000
int d[1024],t,N;
int main()
{
int i,j,p,q;
while(scanf("%d",&N)!=EOF){
d[1]=1;
t=1;
for(i=1;i<=N;i++){
p=0;
for(j=1;j<=t;j++){