码迷,mamicode.com
首页 > 其他好文 > 详细

多边形问题

时间:2016-08-17 10:12:07      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:
给定一个多边形,多边形的每一个顶点上有一个数字,每一条边上有一个运算符(+或*),现在你可以去掉多边形的任意一条边,这样多边形顶点上的数字和边上的符号就购成了一个表达式,对表达式进选择不同的计算顺序,便得到不同的结果,现在给定多边形顶点上的数字和边上的符号,找出能得到的最大值。
技术分享
如图:我们可以断开第一个“+”号,得到表达式10*2+3*5,对于这个表达式可以这样算(10*2+3)*5=115;也可以这样算10*2+3*5=35;现在的问题是找一种断开法,和一种算法使得算出的值最大。
输入:
10
10 -3 1 2 2 8 4 10 6 5 
+ + + + * + + + + + 
输出:
506

 1 #include <algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<iomanip>
 5 #include <cstdio>
 6 #include <vector>
 7 #include <cmath>
 8 using namespace std;
 9 
10 bool you;
11 int n;long long sum[205];long long f[105][105][2];//表示以x开头长度为y时的最大值及最小值 
12 char fu[205];
13 
14 int main(){
15     scanf("%d",&n);long long maxe;
16     for(int x=1;x<=n;x++){cin>>sum[x];sum[x+n]=sum[n];}
17     for(int x=1;x<=n;x++){scanf("%s",fu+x);}
18     for(int x=1;x<=n;x++)f[x][0][0]=sum[x],f[x][0][1]=sum[x];
19     for(int y=1;y<n;y++){
20         for(int x=1;x<=n;x++){
21             bool use1=0,use2=0;
22             for(int z=0;z<y;z++){
23                 int r=x+z+1;
24                 if(x+z+1>n)r=r%n;
25                 long long int a=f[x][z][0],b=f[r][y-z-1][0],c=f[x][z][1],d=f[r][y-z-1][1];
26                 long long int e,i,g,h;
27                 int j=x+z;
28                 if(x+z>n)j=(x+z)%n;
29                 if(fu[j]==+)e=a+b,i=c+b,g=a+d,h=c+d;
30                 else e=a*b,i=c*b,g=a*d,h=c*d;
31                 long long int minn=min(min(e,i),min(g,h));
32                 long long int maxn=max(max(e,i),max(g,h));
33                 if(use1==0)use1=1,f[x][y][0]=minn;
34                 else f[x][y][0]=min(f[x][y][0], minn);
35                 if(use2==0)f[x][y][1]=maxn,use2=1;
36                 else f[x][y][1]=max(f[x][y][1],maxn);
37             }
38             use1=0,use2=0;
39             if(y==n-1){if(you==0)you=1,maxe=f[x][y][1];else maxe=max(maxe,f[x][y][1]);}
40         }    
41     }
42     cout<<maxe;
43     // 4 10 2 3 5 * + * +
44     
45     return 0;
46 }

 

多边形问题

标签:

原文地址:http://www.cnblogs.com/Ateisti/p/5778615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!