51Nod 1052 最大M子段和 DP

2021-08-09 18:31:05 字數 1080 閱讀 7394

第一眼dp

第二眼隔板法

第三眼。。。

嗯?第二眼好像看偏了?

重新看第二眼

二維dp

所以說這道題是看兩眼就可以看出來做法比較裸的dp題

wa了一發以後又重新看了一眼題面

嗯,要開long long

所以說這道題是看三眼就可以ac比較裸的dp題

做完後倒回來看一眼自己的程式

嗯,只用到前面的一維

陣列可以迴圈使用

所以說這道題是看四眼就可以優化程式比較裸的dp題

這話說出來我自己都不信

c++ 109 ms 2116 kb accepted 2017/10/24 18:28:10 80

#include 

#define c (c=nc())

using

namespace

std;

long

long max[5005],f[2][5005],ans,sum;

int a[5005],m,n,cnt,line;

long

long max(long

long a,long

long b)

inline

char nc(void)

inline

void read(int &n)

int main(void)

if (cnt<=m)

printf("%lld\n",sum);

return

0; }

line=0;

for (i=1;i<=m;++i)

for (j=1;j<=n;++j)

line^=1;

}for (i=1;i<=n;++i)

printf("%lld\n",ans);

return

0;}

51Nod 1052 最大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。刷刷水有益身心健康。不過我還是沒有一眼看出來。考慮...

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...