Description
Input
Output
Sample Input
4 t -7 t 4 x 2 x 5
Sample Output
33 1 2
Source
#include <iostream>
#include <cstdio>
#include <cstring>
const long N = 200;
long n;
long a[N];
long fmax[N][N], fmin[N][N];
using namespace std;
long min(long a, long b)
{
return a > b ? b : a;
}
long max(long a, long b)
{
return a < b ? b : a;
}
void init()
{
memset(fmax, 128, sizeof(fmax));
memset(fmin, 127, sizeof(fmin));
for (long i = 1; i <= n; i++)
{
char c;
scanf("%c ", &c);
if (c == 't') a[i] = 0;
else a[i] = 1;
a[i + n] = a[i];
scanf("%d ", &fmin[i][i]);
fmax[i][i] = fmin[i][i];
fmax[i + n][i + n] = fmin[i + n][i + n] = fmin[i][i];
}
}
void dp()
{
for (long l = 2; l <= n ; l++)
{
for (long i = 1; i + l - 1 <= 2 * n; i++)
{
long j = i + l - 1;
for (long k = i; k < j; k++)
{
if (a[k + 1] == 0)
{
fmax[i][j] = max(fmax[i][j], fmax[i][k] + fmax[k + 1][j]);
fmin[i][j] = min(fmin[i][j], fmin[i][k] + fmin[k + 1][j]);
}
else{
fmax[i][j] = max(fmax[i][j], fmax[i][k] * fmax[k + 1][j]);
fmax[i][j] = max(fmax[i][j], fmin[i][k] * fmin[k + 1][j]);
fmin[i][j] = min(fmin[i][j], fmin[i][k] * fmin[k + 1][j]);
fmin[i][j] = min(fmin[i][j], fmax[i][k] * fmin[k + 1][j]);
fmin[i][j] = min(fmin[i][j], fmin[i][k] * fmax[k + 1][j]);
fmin[i][j] = min(fmin[i][j], fmax[i][k] * fmax[k + 1][j]);
}
}
// cout <<i <<' '<<j<<' '<< fmax[i][j] <<endl;
}
}
}
int main()
{
freopen("poj1179.in", "r", stdin);
while (scanf("%d\n", &n) != EOF)
{
init();
dp();
long re = -21474837l;
for (long i = 1; i <= n; i++)
{
//cout << i << ' '<< i + n - 1<<' '<< fmax[i][i + n - 1]<<endl;
if (fmax[i][i + n - 1] > re)
re = fmax[i][i + n - 1];
}
printf("%d\n", re);
for (long i = 1; i <= n; i++)
{
if (fmax[i][i + n - 1] == re)
printf("%d ", i);
}
printf("\n");
}
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务