我赛时用这份代码过掉了此题,但是不会证明复杂度,有大佬可以帮忙证明/证伪吗?
#include<bits/stdc++.h>
using namespace std;
long long n,W,w[1200010],v[1200010],f[1200010],tmp[1200010],ans;
int main(){
cin>>n>>W;for(int i=1;i<=n;i++)cin>>w[i]>>v[i];
for(int i=1;i<=n;i++){
for(int j=0;j<=W;j++)tmp[j]=f[j];
bool flag=1;
for(int j=1;j<=W/w[i]&&flag;j++){
bool now=0;
for(int k=W;k>=w[i]*j;k--)
if(tmp[k-w[i]*j]+j*v[i]-j*j>=f[k])
f[k]=max(f[k],tmp[k-w[i]*j]+j*v[i]-j*j),
ans=max(ans,f[k]),
now=1;
flag&=now;
}
}cout<<ans;
}