最大内存限制:2000/1000 ms (Java/others )内存限制336065536/32768 k (Java/others ) ) )。
总订阅(s ) : 24332接受订阅(s ) : 8356
problemdescriptionnowithinkyouhavegotanacinignatius.l ' s ' max sum ' problem.tobeabraveacmer,wealwayschallengeourselvesevestter
genaconsecutivenumbersequences 1,S 2,S 3,s4.sx, sn (1xn1,000,000,- 32768 ) . wx32767
nowgivenanintegerm(m0 ),yourtaskistofindmpairsofiandjwhichmakesum ) I1,j 1 ) sum ) I2,j 2 ) sum ) I3,j 3 ).sum ) ii
But I`m lazy,id on ' twanttowriteaspecial-judge module,soyou don ' thavetooutputmpairsofiandj,justoutputhemaximalsumatiandi
inputeachtestcasewillbeginwithtwointegersmandn,followed by n integers S 1,S 2,S3.sn。
文件结束时处理。
outputoutputthemaximalsummationdescribedaboveinoneline。
样品输入1312326-14-23-23
Sample Output 68 Hint Huge input,scanfanddynamicprogrammingisrecommended .题意:给出带n个元素的数组,将其分成m个字段,求字段和最大值。 (字段之间不能交叉。)。 dp[i][j]的前j个是足以满足I个字段的最大值。 dp[i]与前面的数字构成I个字段,或独立成为一个字段。 方程: DP[j]=max(DP[j-1]a[j],pre[j-1] a[j] )代码: # include stdio.h # includealgorithmusingnamespacespase int pre[MAXN 10]; int a[MAXN 10]; int main () { int n,m; int i,j,MAX; wile (扫描(' % d % d ),m,n )!=eof(/m为分钟的场数,n序列中的要素数) for ) I=1; i=n; I ) Scanf('%d ',a[i]; pre[i]=0; dp[i]=0; } dp[0]=0; pre[0]=0; for(I=1; i=m; I ) ) { MAX=-INF; for(j=I; j=n; j ) {DP[j]=max(DP[j-1]a[j],pre[j-1] a[j] );//第j个元素是一个字段pre[j-1]=MAX,其中,前面的元素与第I个子段或第j个元素相组合; //更新由pre[j-1]表示第一个j-1元素的最大子段和if(DP[j]max ) MAX=dp[j]; }printf('%dn ',MAX ); }返回0; }