大佬求助,4个点运行错误
查看原帖
大佬求助,4个点运行错误
307826
Lamorak楼主2020/8/20 14:55

我把他当做分组背包来做

#include<bits/stdc++.h>
using namespace std;
struct node{
	long long w,c;
}a[20000009];
long long f[20000009],n,m,v1[20000009],v2[500][110],p[20000009];
bool cmp(node d1,node d2){
	return d1.w<d2.w;
}
int main(){
	cin>>n>>m;
	int o=1;
	for(int i=1;i<=n;i++){
		cin>>a[i].w>>a[i].c;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(a[j].w-a[i].w>3){
				p[i]=o;
				p[j]=o;
				o++;
			}
			else{
				p[i]=o;
				o++;
				p[j]=o;
			}
		}
	}
	for(int i=1;i<=n;i++){
		v1[p[i]]++;
		v2[p[i]][v1[p[i]]]=i;
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--){
			int e=v2[p[i]][v1[p[i]]];
			if(j>=a[e].w){
				f[j]=max(f[j],f[j-a[e].w]+a[e].c);
			}
		}
	}
	cout<<f[m];
	return 0;
}

2020/8/20 14:55
加载中...