﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-guodongshan-随笔分类-心得总结</title><link>http://www.cppblog.com/guodongshan/category/15100.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 13 Oct 2010 03:23:12 GMT</lastBuildDate><pubDate>Wed, 13 Oct 2010 03:23:12 GMT</pubDate><ttl>60</ttl><item><title>ACM算法</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Wed, 13 Oct 2010 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129717.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129717.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129717.html</trackback:ping><description><![CDATA[<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">一、数论算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．求两数的最大公约数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．求两数的最小公倍数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．素数的求法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">小范围内判断一个数是否为质数：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">判断</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>longint</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">范围内的数是否为素数（包含求</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>50000</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">以内的素数表）：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">二、图论算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．最小生成树</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.Prim</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.Kruskal</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">贪心</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>)<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">按权值递增顺序删去图中的边，若不形成回路则将此边加入最小生成树。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">标号法求解单源点最短路径：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.Floyed</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法求解所有顶点对之间的最短路径：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>C. Dijkstra </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">计算图的传递闭包</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．无向图的连通分量</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">深度优先</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">宽度优先（种子染色法）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>5</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．关键路径</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">几个定义：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">顶点</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为源点，</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为汇点。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>a. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">顶点事件最早发生时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ve[j], Ve [j] = max{ Ve [j] + w[I,j] },</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其中</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ve (1) = 0;<br>b. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">顶点事件最晚发生时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Vl[j], Vl [j] = min{ Vl[j] &#8211; w[I,j] },</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其中</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Vl(n) = Ve(n);<br>c. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">边活动最早开始时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Ee[I], </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">若边</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">由</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>&lt;j,k&gt;</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示，则</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ee[I] = Ve[j];<br>d. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">边活动最晚开始时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> El[I], </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">若边</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">由</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>&lt;j,k&gt;</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示，则</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>El[I] = Vl[k] &#8211; w[j,k];<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">若</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Ee[j] = El[j] </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，则活动</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为关键活动，由关键活动组成的路径为关键路径。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求解方法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>a. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">从源点起</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>topsort,</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">判断是否有回路并计算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ve;<br>b. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">从汇点起</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>topsort,</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Vl;<br>c. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ee </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> El;<br>6</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．拓扑排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">找入度为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的点，删去与其相连的所有边，不断重复这一过程。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">例</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">寻找一数列，其中任意连续</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>p</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">项之和为正，任意</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>q </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">项之和为负，若不存在则输出</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>NO.<br>7.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">回路问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>Euler</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">回路</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(DFS)<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">定义：经过图的每条边仅一次的回路。（充要条件：图连同且无奇点）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>Hamilton</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">回路</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">定义：经过图的每个顶点仅一次的回路。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">一笔画</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">充要条件：图连通且奇点个数为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个或</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>9</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．判断图中是否有负权回路</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Bellman-ford </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>x[I],y[I],t[I]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">分别表示第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">条边的起点，终点和权。共</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个结点和</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>m</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">条边。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>10</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">第二最短路径：每举最短路径上的每条边，每次删除一条，然后求新图的最短路径，取这些路径中最短的一条即为第二最短路径。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">同理，第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径可在求解第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n-1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径的基础上求解。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">三、背包问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">部分背包问题可有贪心法求解：计算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Pi/Wi<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">数据结构：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>w[i]:</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个背包的重量；</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>p[i]:</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个背包的价值；</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>0-1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">背包：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">每个背包只能使用一次或有限次</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">可转化为一次</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>)</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求最多可放入的重量。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求可以放入的最大价值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F[I,j] </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为容量为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">时取前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个背包所能获得的最大价值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F [i,j] = max { f [ i &#8211; w [ j ], j-1] + p [ j ], f[ i,j-1] }<br>C.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求恰好装满的情况数。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．可重复背包</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求最多可放入的重量。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F[I,j]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个物品中选择若干个放入使其体积正好为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的标志，为布尔型。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">状态转移方程为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>f[I,j] = f [ I-1, j &#8211; w[I]*k ] (k=1.. j div w[I])<br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求可以放入的最大价值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>f[i,j] = max { f [i- k*w[j], j-1] + k*p[j] } (0&lt;=k&lt;= i div w[j])<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其中</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>f[i,j]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示容量为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">时取前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">种背包所能达到的最大值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>C.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求恰好装满的情况数。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>Ahoi2001 Problem2<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求自然数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">本质不同的质数和的表达式的数目。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路一，生成每个质数的系数的排列，在一一测试，这是通法。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路二，递归搜索效率较高</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路三：可使用动态规划求解</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">四、排序算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">快速排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">插入排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路：当前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>a[1]..a[i-1]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">已排好序了，现要插入</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>a[i]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">使</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>a[1]..a[i]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">有序。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>C.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">选择排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>D. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">冒泡排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>E.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">堆排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">归并排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>G.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">基数排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思想：对每个元素按从低位到高位对每一位进行一次排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">五、高精度计算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">高精度数的定义：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度加法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度减法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度乘以低精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度乘以高精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>5</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度除以低精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>6</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度除以高精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">六、</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">树的遍历</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．已知前序中序求后序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．已知中序后序求前序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．已知前序后序求中序的一种</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">七</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">进制转换</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">任意正整数进制间的互化</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">除</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">取余</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">实数任意正整数进制间的互化</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">乘</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">取整</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">负数进制：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">设计一个程序，读入一个十进制数的基数和一个负进制数的基数，并将此十进制数转换为此负</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">进制下的数：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>-R</span><span style="FONT-FAMILY: 黑体; COLOR: #333333; mso-hansi-font-family: 黑体; mso-bidi-font-family: 黑体">&#8712;</span><span style="FONT-FAMILY: Verdana; COLOR: #333333; mso-bidi-font-family: Verdana" lang=EN-US>{-2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>-3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>-4,....-20} <br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">八</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">全排列与组合的生成</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">排列的生成：（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>1..n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">组合的生成</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(1..n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中选取</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>k</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个数的所有方案</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>)<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">九</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">查找算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">折半查找</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">树形查找</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">二叉排序树：每个结点的值都大于其左子树任一结点的值而小于其右子树任一结点的值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">查找</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十、贪心</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">会议问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个活动每个活动有一个开始时间和一个结束时间，任一时刻仅一项活动进行，求满足活动数最多的情况。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">解：按每项活动的结束时间进行排序，排在前面的优先满足。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）会议室空闲时间最少。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）每个客户有一个愿付的租金，求最大利润。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）共</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>R</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">间会议室，第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个客户需使用</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">间会议室，费用相同，求最大利润。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十一、回溯法框架</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1. n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">皇后问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2.Hanoi Tower h(n)=2*h(n-1)+1 h(1)=1<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十二、</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>DFS</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">框架</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十三、</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>BFS</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">框架</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十五、数据结构相关算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．链表的定位函数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．单链表的插入操作</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．单链表的删除操作</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．双链表的插入操作（插入新结点</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>q</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>5</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．双链表的删除操作</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><br>原文链接：<a href="http://old.blog.edu.cn/user3/Hailer/archives/2006/1545396.shtml" target=_blank>http://old.blog.edu.cn/user3/Hailer/archives/2006/1545396.shtml</a><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-13 09:46 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上海交大ACM队长建议--谈谈ACM比赛中的代码能力 </title><link>http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Mon, 11 Oct 2010 09:37:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129461.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129461.html</trackback:ping><description><![CDATA[在ICPC比赛中，个人能力方面，如果粗略地分的话，大致可以分为算法能力、代码能力和查错能力。那些大学才开始参加比赛的选手，写代码的基本功一般会比较扎实，主要瓶颈应该是算法能力。而对于OI转ICPC的选手来说，代码能力往往是最大的缺陷。随着OI转ICPC的选手逐渐增多，代码能力的问题愈发暴露了出来。 <br><br>一、如何定义代码能力 <br><br>Comars曾经给代码能力作过一个比较准确的定义。2004年暑假时，Comars曾经说过：他认为150行以内的题目，他的1Y率非常高，并且保持稳定；而当代码长度超过150行以后，1Y率就开始急速下降了。如果我们画出一条1Y率的曲线的话，150行就是一个转折点。我们不妨认为，150行就是Comars当时的代码能力。一年以后，经过努力，Comars把代码能力提高到了250行。不过，这已经是后话了。 <br><br>二、如何提高代码能力 <br><br>我一直觉得写程序和写文章是一个对很好的类比。 <br><br>写文章需要先从宏观入手，构思文章的结构。写程序同样需要。一个好的结构，就是一个好的开始。一个好的开始，是成功的一半。 <br>一篇好的文章需要各种句式和词藻的合理组合。体现到写程序上来，就是一些单句以及三五行的小结构的熟练使用。这些都是需要平时总结和积累的。 <br><br>但凡文章写得好的人，一定看过很多别人写的文章。同样的道理，多看别人的程序，用心地去看，也可以提高自己的代码能力。 <br>我鼓励队员去看别人写的程序，特别是像Comars这样的选手写的程序。从优秀的程序中，我们可以体会别人良好的程序结构，同时也可以学到很多写程序的技巧――三五行的小技巧。在和Comars做队友的两年时间里，我通过看Comars的程序，学会了很多小技巧。逐渐地，我觉得我写的某些程序已经和Comars有点相像了。 <br>那么，如果身边没有Comars这样优秀的选手可以借鉴，该怎么办呢？其实没关系。任何一个程序都是可以看的。一个程序，就算写得再差，总还会有一两个闪光点，要想办法把它们找出来。另外，程序里写得不好的地方，也要一一找出来。 <br>读程序，从某种角度来看，就像读史。好的历史是用来借鉴的；不好的历史则应该引以为戒。读程序也是一样，择其善者而从之，其不善者而改之。 <br><br>三、谨慎地对待STL和SCL <br><br>STL - Standard Template Library。在ICPC的选手中，STL是相当受欢迎的。的确，如果STL用得好，程序可以精简很多。既提高了编程的速度，也提高了编程的准确性。 <br>SCL - Standard Code Library，就是标准程序库。对很多选手来说，SCL可是命根子啊 <br><br>我觉得STL和SCL都不是坏东西，但是需要谨慎地使用。 <br><br>我向来不主张队员一进队就开始用STL（虽然这种现象普遍存在 ）。我认为，STL的作用是锦上添花，而不是雪中送炭。比方说，一个heap写得很熟练的队员，我觉得他可以偷偷懒，用一下STL。但是，那些不太会写heap的队员，就不应该用STL里的heap。因为，他们真正应该做的是掌握写heap的能力――这才是最本质的代码能力。 <br>学会用STL是件很爽的事情。但是须知有所得必有所失。如果过早地接触STL，会让你失去很多锻炼代码能力的机会。 <br><br>至于SCL，我的主张是尽量不用。 <br>不可否认，队里确实有一些人SCL用得很好。但是，我至今仍然没有见过一个SCL用得很好，同时有拥有很强的代码能力的人。同样是有所得必有所失，你平时习惯了去抄程序，必然少了很多自己构思程序的机会，从而影响代码能力的提高。 <br>当然，我也不是完全反对去使用SCL，偶尔用一下也是可以的，例如在比赛中。但是，需要注意的是，一定要用自己整理的SCL。我见过有人拿着一本别人整理的SCL，虽然内容很齐整，但是我没见他用对过。因为这本SCL不是他整理的，他自己都不知道每个程序在使用的时候应该注意些什么，于是一用就错。<br><br><br>
<h3 class=first><font style="COLOR: #ff0000" color=#0000ff>算法名言(含义深刻啊)</font></h3>
<div class=content>1.算法的灵魂――数据结构+算法=程序 <br><br>2.剪枝是搜索的关键。 <br><br>3.可贪则贪。 <br><br>4.枚举是最容易实现的，但也是最慢的。 <br><br>5.难题往往需要另辟蹊径。 <br><br>6.算法并不是孤立的，而是可以结合在一起的。 <br><br>7.不做烂题水平也会下降，但不想难题永远不会提高。</div>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-11 17:37 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中获取高精度时间差 </title><link>http://www.cppblog.com/guodongshan/archive/2010/10/06/128818.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Wed, 06 Oct 2010 13:39:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/06/128818.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/128818.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/06/128818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/128818.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/128818.html</trackback:ping><description><![CDATA[<p>解决一个问题通常有多种方法， 我们总想找到最高效的，所以需要对比不同算法执行所用的时间。可惜的是，C++中提供的方法一般只能精确到毫秒级。</p>
<p>提供一种更加精确的方法。编写一个函数，可以在C++中这样写：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">__declspec&nbsp;(naked)&nbsp;unsigned&nbsp;__int64&nbsp;GetCpuCycle(&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;_asm<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rdtsc<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<p>RDTSC的返回值存放在EDX EAX中， EDX为高32位，EAX为低32位。这里的 RDTSC 指令( Read Time Stamp Counter )， 获得CPU的高精度时间戳。</p>
<p>这样以来我们就可以在随处获得当前的CPU自上电以来的时间周期数了：</p>
<p id=aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown>unsigned __int64 iCpuCycle = GetCpuCycle();</p>
<p id=aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown>根据这个数字我们可以计算出上电以来所经历的时间( 秒s )：</p>
<p>second = iCpuCycle / CPU主频率( HZ );</p>
<p>1GHZ = 1,000 MHZ = 1,000,000 KHZ = 1,000,000,000 HZ;</p>
<p id=aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown>获取两次作差就可以得到运行的时间了。其实没必要换算成时间，关注差值就行了。</p>
<p id=aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown>&nbsp;</p>
<p id=aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown>PS：</p>
<p id=aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown>可以放心一个unsigned __int64 不会溢出 - - 可以计算一下你的CPU能保存多少年的时间。。</p>
<p>根据这一方法有几个好处： 一是精度高，二是函数调用开销最小，三是平台限制小，四是具有和CPU主频相对应的直接关系。。。 但是由于精度高，得到的数字浮动比较大。。<br></p>
<img src ="http://www.cppblog.com/guodongshan/aggbug/128818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-06 21:39 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/06/128818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>