hdu1024 最大m子串行和

2022-09-05 01:24:10 字數 1075 閱讀 3117

題意:

給你乙個序列n個數組成,然後讓你在裡面找到m個子序列,讓這m個子序列的和最大。

思路:dp[i][j]表示的是第j個數字在第i個子序列時的當前最優值。

dp[i][j] = maxx(dp[i][j-1] + num[j] ,maxx(dp[i-1][k]) + num[j]);  k是從1到j-1.

可以這麼理解這個轉移方程,對於當前的這個數字,如果把他放到第i個子序列中有兩種情況,乙個是他作為第i個子序列的第乙個數字,另乙個就是不作為第乙個數字,作為第乙個數字的時候是 maxx(dp[i-2][k] + num[j]) 1<=k

__int64 max

for(i = 1 ;i <= m ;i ++) //枚舉子序列

}最後直接輸出max就行了,因為裡面儲存的正好是第m個子序列中最大的那個。

#include#include#define n 110000

#define inf 922337203685477580

__int64num[n] ,dp[n] ,mk[n];

__int64maxx(

__int64x,

__int64y)

intmain

() }printf("%i64d\n",max);

}return0;

}

HDU 1024最大m段字段和

題意 給你n個數,選m個子段,各個子段連續且不相交,長度可以為1,設maxn為各個子區間的和,求最大的maxn。分析 設dp i j 代表 j個數選取 i 個子段 maxn最大的值 得狀態轉移方程dp i j ma x dp i j 1 dp i j 1 a j dp i 1 k a j 0 kdp...

HDU 1024 新最大子串行和 DP

題意是要在一段數列中求 m 段互不重合的子數列的最大和。動態規劃,用陣列 num 儲存所給數列,建二維陣列 dp dp i j 表示當選擇了第 j 個數字 num j 時,前 j 個數字被分成 i 組的所得最大和。那麼這個最大和等於 max 即 dp i j max dp i j 1 dp i 1 ...

HDU1024 最大子段和

題意 給n個數 然後把這些數分成m段 求子段和的最大值 思路 不難去想 我們用dp i j 去表示前面j個數分成了i段的最大值 那麼就會出現乙個問題 那就是第j個數是不是在這i段之內 1 我們把第j個數放在前i段內 那麼顯然 dp i j dp i j 1 a j 2 我們讓第j個數去乙個新段 那個...