![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//**************************************
Problem: HEU 5019 Max
Time: 0.0030 s
Memory: 552 k
Accepted Time: 2009-04-28 11:46:04
Tips: 因为有负数,所以要考虑最小值
**************************************/
#include <stdio.h>
char b[110];
long max[110][110],min[110][110];
long fun(int a1,int a2,int a3,int a4,int flag)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
long sum;
switch(flag)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
case 1:
if(b[a2]=='+')sum=max[a1][a2]+max[a3][a4];
else sum=max[a1][a2]*max[a3][a4];
break;
case 2:
if(b[a2]=='+')sum=min[a1][a2]+min[a3][a4];
else sum=min[a1][a2]*min[a3][a4];
break;
case 3:
if(b[a2]=='+')sum=min[a1][a2]+max[a3][a4];
else sum=min[a1][a2]*max[a3][a4];
break;
case 4:
if(b[a2]=='+')sum=max[a1][a2]+min[a3][a4];
else sum=max[a1][a2]*min[a3][a4];
break;
}
return sum;
}
int main()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int n;
while(scanf("%d",&n)!=EOF)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
int i,j,k,t;
for(i=1;i<=n;i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
scanf("%ld",&max[i][i]);
min[i][i]=max[i][i];
if(i!=n)scanf("%s",&b[i]);
}
long temp;
for(i=n-1;i>=1;i--)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for(j=1;j<=i;j++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
long max1=-100000000;
long min1=100000000;
for(k=j;k<j+n-i;k++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for(t=1;t<5;t++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
temp=fun(j,k,k+1,j+n-i,t);
if(temp>max1)max1=temp;
if(temp<min1)min1=temp;
}
}
max[j][j+n-i]=max1;
min[j][j+n-i]=min1;
}
}
printf("%ld\n",max[1][n]);
}
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
posted @
2009-04-28 11:53
主函数
阅读(
168)
评论()
编辑
收藏
举报