动态转移方程:dp[i][j]=max(dp[i-1]+a[i], max(dp[t][j-1])+a[i]) (j-1<=t<i)
while(scanf("%d%d", &m, &n)!=EOF)
memset(dp, 0, sizeof(dp));
dp[i][j]=dp[i-1][j]+num[i];
for(k=j-1; k<i; k++)//可以用一个Max变量一直更新 j-1 到 i-1 的 最大值
dp[i][j]=max(dp[i][j], dp[k][j-1]+num[i]);
else dp[i][j]=dp[i-1][j-1]+num[i];
__int64 dp[N][2], num[N];
__int64 n, m, i, j, k, pos;
while(scanf("%I64d%I64d", &m, &n)!=EOF)
dp[j][pos]=dp[j-1][pos^1]+num[j];
__int64 Max=dp[j-1][pos^1];
for(i=j+1; i<=n-m+j; i++)
Max=max(Max, dp[i-1][pos^1]);//这一块直接将 k 的 for循环去掉
dp[i][pos]=max(dp[i-1][pos], Max)+num[i];
__int64 n, m, i, j, k, oldN;
__int64 maxN;//记录dp[k][j-1] (k>=j-1 && k<i) 只有num[i]自己属于第 j 段 所有情况的最大值!
while(scanf("%I64d%I64d", &m, &n)!=EOF)
maxN=max(dp[j-1], dp[j]);// Max = max(dp[j-1][pos^1], dp[j][pos^1])
for(i=j+1; i<=n-m+j; i++)
oldN=dp[i];// 记录 dp[i-1][pos^1]
dp[i]=max(maxN, dp[i-1])+num[i] ;// dp[j][pos] = dp[j-1][pos^1] + num[j]