果园里有 N N N 棵果树,每天你可以选择一棵树将树上的果子摘完,获益就是树上果子的重量。但是每过一天第 i i i 棵树上的果子会由于各种原因减少,导致重量下降 p [ i ] p[i] p[i](当然,如果树上的果子为 0 0 0 了,自然获利就是 0 0 0),问 K K K 天内你的最大获利。
共三行: 第一行两个数 N 、 K N、K N、K; 第二行 N N N 个数表示树的初始重量 a [ i ] a[i] a[i]; 第三行 N N N 个数表示 p [ i ] p[i] p[i]。
仅一行一个数,表示最大获利。
【数据规模】 对于 30 % 30\% 30% 的数据,满足 1 ≤ n ≤ 100 1\le n\le 100 1≤n≤100; 对于 100 % 100\% 100%的数据,满足 1 ≤ n ≤ 1000 , 初 始 重 量 ≤ 100000 1\le n\le 1000,初始重量\le 100000 1≤n≤1000,初始重量≤100000。 其中 10 % 10\% 10%的数据,满足 n = k n=k n=k
这道题类似于摇钱树 只需要在排序后做一个 01 01 01 背包就可以了 (然而比赛时一直没想出来) 方程式是: f [ i ] [ j ] = m a x { f [ i − 1 ] [ j ] f [ i − 1 ] [ j − 1 ] + m a x ( x [ i ] − y [ i ] ∗ ( j − 1 ) , 0 ) ) f[i][j]=max\begin{cases}f[i-1][j]\\f[i-1][j-1]+max(x[i]-y[i]*(j-1),0))\end{cases} f[i][j]=max{f[i−1][j]f[i−1][j−1]+max(x[i]−y[i]∗(j−1),0))
这里我用了滚动数组,那么方程式就是: f [ j ] = m a x ( f [ j ] , f [ j − 1 ] + m a x ( x [ i ] − y [ i ] ∗ ( j − 1 ) , 0 ) ) f[j]=max(f[j],f[j-1]+max(x[i]-y[i]*(j-1),0)) f[j]=max(f[j],f[j−1]+max(x[i]−y[i]∗(j−1),0))