过样例WA求掉
查看原帖
过样例WA求掉
547238
篮网总冠军楼主2025/6/29 22:46
#include <bits/stdc++.h>
using namespace std;

long long a[35];
long long dp[35][2];
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int t;
	cin>>t;
	while(t--){
		memset(dp,0,sizeof(dp));
		long long x,y,k;
		cin>>x>>y>>k;
		for(int i=0;i<=k;i++) cin>>a[i];
		for(int i=k+1;i<=31;i++) a[i]=a[i-1]*2;
		for(int i=1;i<=31;i++) a[i]=min(a[i],a[i-1]*2);
		long long v=abs(x-y);
		dp[0][1]=1000000000;
		for(int i=1;i<=32;i++){
			int r=(v>>(i-1))&1;
			if (r==0){
				dp[i][0]=min(dp[i-1][0],dp[i-1][1]+a[i-1]);
				dp[i][1]=min(dp[i-1][0]+a[i-1],dp[i-1][1]);
			}
			else{
				dp[i][0]=min(dp[i-1][0]+a[i-1],dp[i-1][1]+2*a[i-1]);
				dp[i][1]=min(dp[i-1][0],dp[i-1][1]+a[i-1]);
			}
		}
		cout<<dp[32][0]<<endl;
	}
	return 0;
}

2025/6/29 22:46
加载中...