贪心与DP拼凑的错误程序AC,在线求Hack
查看原帖
贪心与DP拼凑的错误程序AC,在线求Hack
580608
lupengheyyds楼主2024/10/18 20:35

rt,程序如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int NN=55,MM=5e6+5,M=4.9e6;
int n,q,v[NN],c[NN],f[MM],nx,ny;
signed main(){
	cin>>n>>q;
	memset(f,0xcf,sizeof f);
	f[0]=0,nx=1;
	for(int i=1;i<=n;i++){
		int v,c;cin>>v>>c;
		if(c*nx>ny*v)ny=c,nx=v;
		for(int j=v;j<=M;j++)f[j]=max(f[j],f[j-v]+c);
	}
	while(q--){
		int V;cin>>V;
		int l=0,r=V/nx+1;
		while(l<r){
			int mid=l+r>>1;
			if(V-mid*nx<=M)r=mid;
			else l=mid+1;
		}
		if(f[V-nx*l]<0)cout<<"-1\n";
		else cout<<f[V-nx*l]+ny*l<<"\n";
	}
	return 0;
}
2024/10/18 20:35
加载中...