关于昨晚 F
  • 板块学术版
  • 楼主_qingshu_
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/9/29 11:45
  • 上次更新2024/9/29 16:37:40
查看原帖
关于昨晚 F
602803
_qingshu_楼主2024/9/29 11:45

我赛时用这份代码过掉了此题,但是不会证明复杂度,有大佬可以帮忙证明/证伪吗?

#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;
}
2024/9/29 11:45
加载中...