p2626.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 72 行

CPP
72
字号
// p2626.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>

typedef __int64 int64;

#define	MAXN	51
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define	small 0x8000000000000000
#define	big	0x7fffffffffffffff

int	N;
char	Op [MAXN];
int64	OMax [MAXN] [MAXN] , OMin [MAXN] [MAXN];

bool	init ()
{
	scanf ("%d" , &N ); if ( N == 0 ) return false;
	char	Str [10];
	int	i , p;
	for ( i = 0; i < N; i ++ ) scanf ( "%s%d" , &Str , &p ) , OMax [i] [i] = p , OMin [i] [i] = p , Op [i] = Str [0];
	return true;
}

int64 Dynamic ()
{
	int	i , j , k , l , Next;
	int64	Ret = small;
	for ( l = 1; l < N; l ++ )
		for ( i = 0; i < N; i ++ ) {
			j = ( i + l ) % N;
			OMax [i] [j] = small , OMin [i] [j] = big;

			for ( k = i; k != j; k = Next ) {
				Next = k + 1 == N ? 0 : k + 1;

				if ( Op [Next] == '+' ) {
					OMax [i] [j] = max ( OMax [i] [j] , OMax [i] [k] + OMax [Next] [j] );
					OMin [i] [j] = min ( OMin [i] [j] , OMin [i] [k] + OMin [Next] [j] );
				} else {
					OMax [i] [j] = max ( OMax [i] [j] , OMax [i] [k] * OMax [Next] [j] );
					OMax [i] [j] = max ( OMax [i] [j] , OMax [i] [k] * OMin [Next] [j] );
					OMax [i] [j] = max ( OMax [i] [j] , OMin [i] [k] * OMin [Next] [j] );
					OMax [i] [j] = max ( OMax [i] [j] , OMin [i] [k] * OMax [Next] [j] );

					OMin [i] [j] = min ( OMin [i] [j] , OMax [i] [k] * OMax [Next] [j] );
					OMin [i] [j] = min ( OMin [i] [j] , OMax [i] [k] * OMin [Next] [j] );
					OMin [i] [j] = min ( OMin [i] [j] , OMin [i] [k] * OMax [Next] [j] );
					OMin [i] [j] = min ( OMin [i] [j] , OMin [i] [k] * OMin [Next] [j] );
				}
			}
		}

	for ( Ret = small , i = 0; i < N; i ++ ) {
		j = i ? i - 1 : N - 1;
		Ret = max ( Ret , OMax [i] [j] );
	}

	return Ret;
}

int main(int argc, char* argv[])
{
	freopen ( "p.in" , "r" , stdin );

	while ( init () ) printf ( "%I64d\n" , Dynamic () );
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?