题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4561
题意:
给出n个数只有0,-2,2, 最大积若为正数,则求出2的幂.
思路:
dp[i][0] 表示第i个位置积为负数时2的个数.
dp[i][0] 表示第i个位置积为正数时2的个数.
AC.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int a[10005], dp[10005][2];
int maxx(int x, int y)
{
return x > y? x: y;
}
int main()
{
//freopen("in", "r", stdin);
int T, ca = 0;
scanf("%d", &T);
while(T--) {
memset(dp, 0, sizeof(dp));
ca++;
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
int ans = 0;
for(int i = 1; i <= n; ++i) {
if(a[i] == -2) {
if(dp[i-1][0])
dp[i][1] = dp[i-1][0]+1;
dp[i][0] = dp[i-1][1]+1;
}
else if(a[i] == 2) {
if(dp[i-1][0]) {
dp[i][0] = dp[i-1][0]+1;
}
dp[i][1] = dp[i-1][1]+1;
}
ans = maxx(ans, dp[i][1]);
}
printf("Case #%d: %d\n", ca, ans);
}
return 0;
}