P1541求助
查看原帖
P1541求助
717599
dengjunhaodejia09楼主2022/12/3 15:16

P1541

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<cmath>

using namespace std;
int a[5001],b[5001],ans=2147483647;
int n,m;
int jsuan() {
	int o=1,sum=b[1];
	for(int i=1;i<=n;i++){
		o+=a[i];
		sum+=b[o];
	}
	return sum;
}
void mon() {

	double At=5000,Dt=0.996,Bt=1e-10;
	for(register double T=At; T>Bt; T*=Dt) {
		int x=rand()%n+1,y=rand()%n+1;
		swap(a[x],a[y]);
		int sum=jsuan();
		if(sum>ans) ans=sum;
		else if(exp((sum-ans)/T)<(double(rand())/RAND_MAX))
			swap(a[x],a[y]);
	}
}
int main() {
	srand(rand());
	int Maxx=0;
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		cin>>b[i];
	}
	for(int i=1; i<=n; i++) {
		cin>>a[i];
		Maxx+=a[i];
	}
	
	ans=-2147483647;
	for(int i=1; i<=100; i++) {
		mon();
	}
	cout<<ans;
	return 0;
}
2022/12/3 15:16
加载中...