https://www.luogu.org/problem/show?pid=1659
妈的就是一道傻逼日提题;
没有那个p[i]那么就是01背包;
有了p[i]那么我们考虑对答案的影响;
显然p[i]越大优先取是最优的;
那么排序;
#include<bits/stdc++.h>
#define Ll long long
using namespace std;
const int N=1e3+5;
struct cs{int a,b;}a[N];
int f[N][N];
int n,m,ans;
bool cmp(cs x,cs y){return x.b>y.b;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i].a);
for(int i=1;i<=n;i++)scanf("%d",&a[i].b);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
for(int j=m;j;j--)
f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i].a-a[i].b*(j-1));
for(int i=1;i<=m;i++)ans=max(ans,f[n][i]);
printf("%d",ans);
}