html做网站心得,wordpress do_shortcode,QQ点钓鱼网站后怎么做,seo推广公司招商前言 %\%%一下出题人BPMBPMBPM 正题
题目链接:https://www.luogu.com.cn/problem/U102488 题目大意 nnn个数#xff0c;选取两组(不一定要全用上)使得他们的和相等且最大。 解题思路
考虑dpdpdp#xff0c;fi,jf_{i,j}fi,j表示到第iii个#xff0c;差值为jjj(这里的差值…前言
%\%%一下出题人BPMBPMBPM 正题
题目链接:https://www.luogu.com.cn/problem/U102488 题目大意
nnn个数选取两组(不一定要全用上)使得他们的和相等且最大。 解题思路
考虑dpdpdpfi,jf_{i,j}fi,j表示到第iii个差值为jjj(这里的差值是大的减去小的)。
然后有
不选fi,jfi−1,jf_{i,j}f_{i-1,j}fi,jfi−1,j加在大的那个上 fi,jaifi−1,jaif_{i,ja_i}f_{i-1,j}a_ifi,jaifi−1,jai加在小的那个上 fi,∣j−ai∣fi−1,jmax{ai−j,0}f_{i,|j-a_i|}f_{i-1,j}max\{a_i-j,0\}fi,∣j−ai∣fi−1,jmax{ai−j,0}
时间复杂度O(n2)O(n^2)O(n2) codecodecode
#includecstdio
#includecstring
#includealgorithm
using namespace std;
const int N5100;
int n,a[N],f[N][N];
int main()
{scanf(%d,n);for(int i1;in;i)scanf(%d,a[i]);memset(f,0xcf,sizeof(f));f[0][0]0;for(int i1;in;i){for(int j0;j5000;j){f[i][j]max(f[i][j],f[i-1][j]);f[i][ja[i]]max(f[i][ja[i]],f[i-1][j]a[i]);f[i][abs(j-a[i])]max(f[i][abs(j-a[i])],f[i-1][j]max(a[i]-j,0));}}printf(%d,f[n][0]);
}