..练习参考【DOC精选】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
..练习参考【DOC精选】

1、 直接按照题意画出图像如下: 几种方法比较: 100个元素,枚举是行不通的。 贪心策略可能会丢掉最优解,也是不行的。 分治法有大量的重复计算,不好。 自然想到动态规划。 算法分析 动态规划的两个基本步骤:构造状态网络和寻找递推关系。由题意直接得到的图中路径和点本身都有值,网络构造复杂。由于起始点不确定,很难将图上的点进行拓扑排序,更难寻找初值和递推关系。 解决方法 联想到单源最短路径问题需要有起始点。 加入一点S作为起始点,得到新图如下: 化成了动态规划中最简单的最短路径问题 拓扑顺序:S 4 3 2 1 递推关系: 令状态量Dis[k]表示顶点S到顶点k的最短距离,则有状态转移方程: 算法实现 数据结构 需要一个Dis数组存放每一点到S的最短路径。 运算过程: 从1开始拓扑排序 从S开始逐次计算 参考: #includeiostream using namespace std; int M,N; int value[101][3];//value[i][0]:得到i需要多少钱 int g[101][101]; //value[i][1]:i的等级 //value[i][2];刚输入时代表可替换的种类,后来表示是否可交换 int Dijkstra() { int dist[101]; int i,j; for(i=1;i=N;i++) dist[i]=g[0][i]; for(i=1;i=N;i++) { int temp=INT_MAX; int u=0; for(j=1;j=N;j++) { if(value[j][2]==0dist[j]temp) { temp=dist[j]; u=j; } } if(u==0) break; value[u][2]=1; for(j=1;j=N;j++) { if(value[j][2]==0g[u][j]0dist[u]+g[u][j]dist[j]) { dist[j]=dist[u]+g[u][j]; } } } return dist[1]; } void solve() { int temp=INT_MAX; int i,j; for(i=1;i=N;i++) { int rank=value[i][1]; for(j=1;j=N;j++) { if(value[j][1]rank||rank-value[j][1]M) value[j][2]=1; else value[j][2]=0; } int t=Dijkstra(); if(ttemp) temp=t; } couttempendl; } int main() { cinMN; int i,j; memset(g,0,sizeof(g)); for(i=1;i=N;i++) { cinvalue[i][0]value[i][1]value[i][2]; g[0][i]=value[i][0]; for(j=1;j=value[i][2];j++) { int n,v; cinnv; g[n][i]=v; } } solve(); system(pause); return 0; } 2 属于几何题,解题思路: 假设给定了P点。墙为。 由于最后一扇门肯定在正方形的边界上,而且可以假设最后一扇门在一堵连续的墙的中间。我们对于所有这样的中点进行枚举,对每一个中点都求出要从给定点P到达此中点的所需要的最少的门的个数。 假设一个中点为Q。我们考虑直线PQ。 定理一:如果PQ和相交,那么要想从P到Q,则需要在墙上开一扇门。 证明:显然。 定理二:可以在所有与PQ相交的墙上开一扇门,使得可以从P走到Q。 证明:连接PQ,若PQ没有

文档评论(0)

taotao0c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档