n個整數組成的序列a[1],a[2],a[3],…,a[n],將這n個數劃分為互不相交的m個子段,並且這m個子段的和是最大的。如果m >= n個數中正數的個數,那麼輸出所有正數的和。
例如:-2 11 -4 13 -5 6 -2,分為2段,11 -4 13一段,6一段,和為26。
刷刷水有益身心健康。
不過我還是沒有一眼看出來。
考慮dp的以為必須選和可選可不選這個思路還是很重要的。
很經典的水題。
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int maxn=5007;
ll i,j,k,l,t,n,m,ans;
ll a[maxn],f[2][maxn],g[2][maxn],u,v;
int main()
u=v;
}printf("%lld\n",g[u][n]);
}
51Nod1052 最大M子段和
n個整數組成的序列a 1 a 2 a 3 a n 將這n個數劃分為互不相交的m個子段,並且這m個子段的和是最大的。如果m n個數中正數的個數,那麼輸出所有正數的和。例如 2 11 4 13 5 6 2,分為2段,11 4 13一段,6一段,和為26。input 第1行 2個數n和m,中間用空格分隔。...
51Nod 1052 最大M子段和
先將同符號的每一段存下來,並記錄前後段標號,將正數段總和記錄為tot 開乙個最小堆存每一段的abs值。每次從堆中取出乙個x 去掉這一段,並將左右的段與之合併再存入堆中,作為撤銷或更改操作。每次操作都會減少一段,直到段數 k就退出。include include include include def...
51nod 1052 最大M子段和
1052 最大m子段和 基準時間限制 2 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 n個整數組成的序列a 1 a 2 a 3 a n 將這n個數劃分為 互不相交的m個子段,並且這m個子段的和是最大的。如果m n個數中正數的個數,那麼輸出所有正數的和。例如 2 11 4 13 ...