Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 852 Accepted Submission(s): 311
2
3 5
1 -1 2
3 -2
1 -1 2
/** 题意:给出一个数组,如果用p代替数组中的一个数求最大的区间和 做法:dp(比赛的时候想得太多) **/ #include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #define maxn 1100 #define INF 0x7fffffff using namespace std; long long mmap[maxn]; long long dp[2][maxn]; long long n; long long DP() { dp[0][0] = max((long long)0,mmap[0]); for(int i=1;i<n;i++) { dp[0][i] = max((long long)0,dp[0][i-1] + mmap[i]); } long long tmp = mmap[0]; for(int i=1;i<n;i++) { dp[1][i] = dp[0][i-1] + mmap[i]; tmp = max(tmp,dp[1][i]); } return tmp; } int main() { //#ifndef ONLINE_JUDGE // freopen("in.txt","r",stdin); //#endif // ONLINE_JUDGE int T; scanf("%d",&T); while(T--) { long long p; scanf("%lld %lld",&n,&p); for(int i=0;i<n;i++) { scanf("%lld",&mmap[i]); } memset(dp,0,sizeof(dp)); long long res = -INF; for(int i=0;i<n;i++) { long long tt = mmap[i]; mmap[i] = p; res = max(res,DP()); mmap[i] = tt; } printf("%lld\n",res); } return 0; }
原文:http://www.cnblogs.com/chenyang920/p/4644008.html