多边形游戏

简介: 题目:http://ica.openjudge.cn/dg1/5/总时间限制: 1000ms 内存限制: 65536kB描述  一个多边形,开始有n个顶点。每个顶点被赋予一个正整数值,每条边被赋予一个运算符“+”或“*”。

题目:http://ica.openjudge.cn/dg1/5/

总时间限制: 
1000ms
内存限制: 
65536kB
描述
  一个多边形,开始有n个顶点。每个顶点被赋予一个正整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。 
    现在来玩一个游戏,该游戏共有n步: 
    第1步,选择一条边,将其删除 
    随后n-1步,每一步都按以下方式操作:(1)选择一条边E以及由E连接着的2个顶点v1和v2; (2)用一个新的顶点取代边E以及由E连接着的2个顶点v1和v2,将顶点v1和v2的整数值通过边E上的运算得到的结果值赋给新顶点。 

    最后,所有边都被删除,只剩一个顶点,游戏结束。游戏得分就是所剩顶点上的整数值。那么这个整数值最大为多少?
输入
第一行为多边形的顶点数n(n ≤ 20),其后有n行,每行为一个整数和一个字符,整数为顶点上的正整数值,字符为该顶点到下一个顶点间连边上的运算符“+”或“*”(最后一个字符为最后一个顶点到第一个顶点间连边上的运算符)。
输出
输出仅一个整数,即游戏所计算出的最大值。
样例输入
4
4 *
5 +
5 +
3 +
样例输出
70
提示
小规模问题可不必用动态规划方法编程求解,仅用递归就可以求解。
计算中不必考虑计算结果超出整数表达范围的问题,给出的数据能保证计算结果的有效性。
在给的例子中,计算过程为(3+4)*(5+5)=70。

分析:(来源:http://blog.csdn.net/sulleywen/article/details/73351703)

设a[i][j]表示顶点i到顶点j-1之间(包含)所有如上述操作后得到的最大值,当j=i+1时,表示的就是点i的值,当j=i时,就是删除边(i-1,i)后得到的最大值。

我们的目标就是要求max{a[i][i]|i=0,1,2,...,n-1},即按照顶点i,i+1,...,n-1,...,j-1进行的游戏的最大值。

 1 #include<stdio.h>  
 2 #define MAX 50  
 3 int main()  
 4 {  
 5     int n,i,j,k,t,s,v,x,y,m;  
 6     int a[MAX][MAX]={0};   //声明并初始化   
 7     char op[MAX],o;           
 8     scanf("%d",&n);  
 9     for(i=0;i<n;i++)  
10         scanf("%d %c",&a[i][(i+1)%n],&op[(i+1)%n]); //这里得取模使形成一个环形链   
11     for(t=2;t<=n;t++){          //t是步长,也就是下面i~j(实际上最后一个点是j-1)中包含点的个数   
12         for(i=0;i<n;i++){       //i是起始点   
13             j=(i+t)%n;          //实际上j-1是终止点,这里用j表示   
14             for(s=1;s<t;s++){   //通过s和k将i~j-1分成两部分a[i][k]和a[k][j]注意a[i][k]是  
15                 k=(i+s)%n;      //i到点k-1而不是到点k,那么在点k-1和点k中的操作符就是op[k]   
16                 x=a[i][k];  
17                 y=a[k][j];  
18                 o=op[k];  
19                 v=(o=='+')?(x+y):(x*y);   
20                 if(v>a[i][j])    //比较大小,因为我们初始化a[MAX][MAX]是0,所以不必担心不符合规则   
21                     a[i][j]=v;  
22             }  
23         }  
24     }  
25     v=0;  
26     for(i=0;i<n;i++){         //现在我们找最大的值。你会问,上面我们并没有直接取a[i][i]呀?   
27         if(a[i][i]>v)         //事实上当t=n时,我们就是在做这个操作,这时i=j,即这里的a[i][i]   
28             v=a[i][i];  
29     }  
30     printf("%d\n",v);  
31     return 0;  
32  }   

 

可以参考:http://blog.csdn.net/sunshinezff/article/details/45092807

 

相关文章
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
数字化转型时代,HR如何用人事管理系统突破效率天花板?
本文深入剖析传统HR面临的四大效率困局,包括招聘低效、考勤错误频发、绩效管理混乱及数据决策滞后,并提出人事管理系统的核心功能矩阵作为解决方案。文章详细解读了招聘自动化引擎、智能考勤生态、绩效飞轮系统和数据决策驾驶舱的创新应用,帮助HR突破效率瓶颈。同时,针对系统选型提供了科学指南,强调适配性与实施策略的重要性。最后,展望HR系统未来三大进化方向:体验驱动、智能预测和生态互联,助力企业实现人力资源管理的数字化转型。
|
编解码 Linux 开发工具
iOS平台如何实现RTSP|RTMP播放端录像?
我们在做RTSP、RTMP直播播放器的时候,有个比较重要的功能,就是拉流端实时录像,包括设置单个录像文件大小、文件前缀、audio转AAC、只录制视频或只录制音频、开始录像、停止录像事件状态回调等。
255 5
|
10月前
|
设计模式 C# C++
建造者模式详解
建造者模式是一种创建型设计模式,通过将对象的构造与表示分离,使得同样的构建过程可以创建不同的对象。它适用于复杂对象的构建,如汽车制造、软件配置生成等场景。该模式的核心角色包括抽象建造者、具体建造者、产品和指挥者。优点包括解耦构造和表示、代码复用性强、易于扩展;缺点是增加代码复杂度,对产品组成部分有依赖。
233 3
|
12月前
|
数据采集 监控 数据安全/隐私保护
数据污染不容小觑,数据治理策略助你轻松应对!
企业应成立专门的数据治理团队,负责数据质量的管理和监控。同时,制定数据治理的流程和规范,明确数据的质量管理流程、责任分工和协作机制,确保数据治理工作的有序进行。
|
编解码 人工智能 测试技术
ShareGPT4V作者团队又一力作!百万高质量视频-字幕数据助力社区提升多模态大模型视频理解及生成能力
【6月更文挑战第30天】ShareGPT4Video`团队推出百万视频-字幕数据集,强化多模态模型的视频理解和生成。包括40K视频的`ShareGPT4Video`数据集、`ShareCaptioner-Video`模型和8B参数的`ShareGPT4Video-8B`模型,后者在视频基准测试中取得最佳效果。差异化字幕生成策略解决了传统方法的局限。尽管取得突破,但数据规模和模型泛化仍是未来挑战。[论文链接](https://arxiv.org/abs/2406.04325v1)
283 1
|
缓存 安全 Java
【揭秘】String vs StringBuilder vs StringBuffer:三大字符串类的秘密较量!你真的知道何时该用哪个吗?
【8月更文挑战第19天】探讨Java中`String`、`StringBuilder`与`StringBuffer`的区别及应用场景。`String`不可变,适合做哈希表键或多线程共享。`StringBuilder`支持动态修改字符串,适用于单线程环境以提高性能。`StringBuffer`与`StringBuilder`功能相似,但线程安全。示例代码展示各类型的基本用法。选择哪种类型取决于具体需求和性能考量。
210 0
|
SQL 分布式计算 监控
Flume学习--1、Flume概述、Flume入门、(一)
Flume学习--1、Flume概述、Flume入门、(一)
|
前端开发 JavaScript UED
JavaScript 线程:处理高并发任务的必备知识(上)
JavaScript 线程:处理高并发任务的必备知识(上)
JavaScript 线程:处理高并发任务的必备知识(上)
|
传感器 芯片
嵌入式通信协议全解析:SPI、I²C、UART详解(附带面试题)
通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。在出现电波传递通信后,通信被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。通信方式包括利用“电”来传递消息的电信,这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。
3935 0