#include <iostream>
#include <cstdio>
#include <cstring>
/************************************************
designer:hl
time:2016/11/15
Exe.Time:624 ms
Exe.Memory:3908 KB
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1422
题意:
题解:最长连续相加大于0子序列
************************************************/
using namespace std;
int dp[200010];
int len[200010];
int data[200010];
int main() {
int i, j, k, l, t, count, num;
while (~scanf("%d", &num)) {
int imax = 0;
for (i = 0; i < num; i++) {
scanf("%d%d", &l, &t);
data[i] = l - t;
}
memset(dp, 0, sizeof(dp));
memset(len, 0, sizeof(dp));
int num2 = num << 1;
for (i = num, j = 0; i < num2; i++) {
data[i] = data[j];
j++;
}
if (data[0] > 0) {
dp[0] = data[0];
len[0] = 1;
}
for (i = 1; i < num2; i++) {
// 如果已经是最长队列了 直接跳出
if (len[i - 1] >= num) {
imax = num;
break;
}
if (dp[i - 1] + data[i] >= 0) {
dp[i] = dp[i - 1] + data[i];
len[i] = len[i - 1] + 1;
imax = imax > len[i] ? imax : len[i];
} else {
len[i] = 0;
dp[i] = 0;
}
}
printf("%d\n", imax);
}
return 0;
}
hdu 1422 重温世界杯 dp
最新推荐文章于 2017-10-14 18:13:59 发布