ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:108.35KB ,
资源ID:19613883      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19613883.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(上海大学ACM集训队培训资料全Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

上海大学ACM集训队培训资料全Word文档格式.docx

1、 return 0;运行结果Hello World!供了很多已经写好的函数 (成为C+标准库),我们做的只是拿来用就可以了。第二行的“using namespace std; ”是使用标准命名空间,因为我们在程序中用到了在标准命名空间 里的函数和对象。 目前可以不了解其具体如何实现, 在以后的程序设计中可以再对其进行了 解。在明函数中 “ cout ”Hello World! ” ”是在屏幕上打印 “Hello World! ”,“endl ” 表明打印完这句话之后需要换行。如果我们替换引号内的内容,程序的输出就会相应改变。另外一个C+程序例子/ ourfunc.cpp - defining

2、your own function#include void simon(int); / function prototype for simon()int main()using namespace std;simon(3); / call the simon() functioncout count;simon(count); / call it againDone! endl;return 0;void simon(int n) / define the simon() functionSimon says touch your toes n times. / void function

3、s dont need return statements下面试运行情况:Simon says touch your toes 3 times. 512Simon says touch your toes 512 times.程序中包含了 cin 语句来从键盘上获取数据。该程序中包含了除 main 函数以外的另一个函数 simon() ,他和 main 函数定义的格式相 同,函数的统一格式如下: type functionname (argumentlist)statements注意,定义simon()的代码在main()函数的后面,C+中不允许将函数定义在另一个函 数内。每个函数的定义都是独

4、立的,所有的函数的创建都是平等的。simon() 函数的函数头定义如下:void simon(int n)以 void 开头表明 simon() 没有返回值,因此我们不能类是这样的使用它。 simple = simon(3);有返回值的函数如下/ convert.cpp - converts stone to poundsint stonetolb(int); / function prototypeint stone;Enter the weight in stone: stone;int pounds = stonetolb(stone); stone stone = pounds pou

5、nds.int stonetolb(int sts)return 14 * sts; 下面是运行情况: Enter the weight in sone: 1414 stone = 196 pounds.程序通过 cin 语句给 stone 提供一个值,然后在 main 函数中,把这个值传递给 stonetolb() 函数,这个植被赋给 sts 之后, stonetolb() 用 return 将 14*sts 返回给 main() 。函数头中的 int 表明 stonetolb() 将返回一个整数。除了 int 类型之外,C+的内置数据类型还有:un sig ned long、Io ng、u

6、n sig ned int、un sig ned short 、short 、char 、unsigned char 、signed char 、bool 、 float 、double 、long double 。对于数据的输入和输出有几道练习题 至二、算法基础1. 什么是算法算法是完成特定任务的有限指令集。所有的算法必须满足下面的标准:a.输入 。由外部题共零个或多个输入量。b.输出 。至少产生一个输出量。c.明确性 。每条指令必须清楚,不具模糊性。d.有限性 。如果跟踪算法的指令,那么对于所有的情况,算法经过有限步以后终止。e.有效性 。每条指令必须非常基础,原则上使用笔和纸就可以实现例

7、 选择排序void SelectionSort(Type a, int n)/Sort the arrat a1:n into nondecreasing order. for (int i=1; i=n; i+)int j=1;for (int k=i+1; k k+)if (ak aj) j = k;Type t = ai;ai = aj;aj = t;c1 nc2 nnc3 (n i)i1使用该函数时,应将 Type替换为C+中的数据类型3性能分析程序P所用时间定义为 T(P), T(P)是编译时间和运行时间之和。下面我们计算一下选择排序运行时所要花费的时间SelectionSortco

8、sttimes aj)j = k; ai = aj; ajc4 (n i)c5 tic6 n=t;那么该算法运行的时间那么,在最坏的条件下,ti的值应该是 (n i)i 1C和n0,使得对于所有的n(n n),有f(n) c g(n)。例对于所有n 1有6 2n n2 2n,所以6 2n n2 (2n)。当然 6 2n n2 (n),但是(n) (2n)。现然无论是O还是Q,都不能精确的描述一个函数C1,C2 和 n,使得对于所有的 n(n n),有 &g( n) f(n) c?g( n)。对于 n 2有 3n 2 3n 且 3n 2 4n,所以 3n 2 (n)记号要比O和Q都要精确。排列生

9、成器 (n!)void Perm(Type a, int k, int n)if (k=n) /Output permutation.for (int i-1;n; i+) coutaielse /ak:n has more than one permutation. / Generate these recursively. for (int i=k; i+)Type t=ak; ak=ai; ai=t; Perm(a, k+1, n);/All permutations of ak+1:n t=ak;对于下面的程序#includevoid Perm(int a, int k, int n)

10、if (kn-1)int i, t;for (i=k;t = ak;ak = ai;ai = t;Perm(a, k+1, n); ai = t;int a3 = 1, 2, 3; Perm(a, 0, 3);该程序的运行结果为12 313 221 33 2 13 1 2那么,该函数就完成了对一个数组进行全排列的操作 下面,分析该程序,我用圆圈代表每次函数的调用 每次函数的调用都用序号表示1.a: 1 2 3k: 06. 2 1 3 22. 17. 2 3 13.8. 3 2 14. 1 3 29.5.10. 3 1 2排列生成器的另外一个版本他将输出给定n个布尔变量的所有可能的组合void

11、Perm (bool a, int k, int n) if (k = n)/stateme nt elseak = true; ak = false; 在上次冬季赛上有这么一道题 竞赛真理JUNNY在经历了无数次学科竞赛的失败以后,得到了一个真理:做一题就要对一题!但是要完全正确地做对一题是要花很多时间(包括调试时间) ,而竞赛的时间有限。所以开始做题 之前最好先认真审题, 估计一下每一题如果要完全正确地做出来所需要的时间, 然后选择一 些有把握的题目先做。 当然,如果做完了预先选择的题目之后还有时间,但是这些时间又 不足以完全解决一道题目,应该把其他的题目用贪心之类的算法随便做做, 争取“

12、骗” 一点分数。根据每一题解题时间的估计值, 确定一种做题方案 (即哪些题目认真做, 哪些题目 “骗”分, 哪些不做),使能在限定的时间内获得最高的得分。INPUT FORMAT:从标准输入( cin,scanf 等)读入数据。数据有多组,先输入 K(K 组数据)。每组第一行有两个正整数N和T,表示题目的总数以及竞赛的时限(单位秒) 。以下的N行,每行4个正整数 W1i 、T1i 、W2i 、T2i ,分别表示第 i 题:完全正确做出来的得分,完全正确做出 来所花费的时间(单位:秒),“骗”来的分数,“骗”分所花费的时间(单位秒)。其中,3 N 30 , 2 T 1080000 , 1 w W

13、1i 、W2i 30000 , 1 T1i 、T2i T。OUTPUT FORMAT: 直接把所求得的最高得分输出。数据之间需换行。SAMPLE INPUT:24 1080018 3600 3 180022 4000 12 300028 6000 0 300032 8000 24 60003720050 5400 10 90050 7200 10 900SAMPLE OUTPUT :5070下面我们对问题进行简化。我们只要考虑是做题还是不做题。数据只有一组,先输入 K( K 组数据)。每组第一行有两个正整数 N和T,表示题目的总数以及竞赛的时限(单位秒) 。以下的N行,每行2个正整数 Wi、T

14、i ,分别表示第i题:做出来的得分和做出来所花费的时间 (单位:秒),OUTPUTFORMAT:直接把所求得的最高得分输出。5 101 20415score += tx1; time += tx0;if (time m) m = score;bool a30; int n, c; cinntSum; m = 0; for (c=0; ctc0;tc1;f(a, 0, n); coutmwork() 函数内, 然后 work 函数找到在时间范围内的就能得到更好的程序 cTime) if (k n) dfs(k+1, n, cScore , cTime); dfs(k+1, n, cScore +

15、 tk1, cTime + tk0);elseint n, c;if (cTime m = 0;if (cScore m)for (c=0; c+)m = cScore;dfs(0, n, 0, 0);这个程序就是深度优先搜索,如果 n 非常大,递归调用的次数是非常惊人的,达到 2n 次。为了减少递归的次数, 我们可以采取剪枝的手段, 在递归下一次前判断是否可行。 如果肯定 不能就停止递归,节省时间。m = cScoreint m;int t202;int tSum;void dfs(int k, int n, int cScore, intcTime)if (k n)dfs(k+1, n, cScore , cTime); tSum)dfs(k+1, n, cScore +tk1, cTime + tk0);为了达到更好的剪枝效果, 可以在搜索前对数据进行排序。 竞赛真理原题也可用这种思想去 解。更复杂的算法将在以后进行讲解 .

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1