WA 40求调
查看原帖
WA 40求调
1135241
Lyx8058楼主2025/1/20 10:14

由于不会用__int128但想学老师的写法。 代码:

#include<bits/stdc++.h>
using namespace std;
typedef __int128 ll;
const int N=100;
int n,m,a[N];ll dp[N][N],pw[N],ans=0;//表示i j 内拿去的最大得分。 
ll calc(ll l,ll r,bool isleft){
	return dp[l][r]+(isleft?a[l]:a[r])*pw[m-r+l];
}
void init(){
	pw[0]=1;
	for(int i=1;i<=m;i++){
		pw[i]=pw[i-1]*2;
	}
}
signed main(){
	scanf("%d%d",&n,&m);
	init();
	while(n--){
		for(int j=1;j<=m;j++){
			scanf("%d",a+j);
		}
		memset(dp,0,sizeof(dp));
		ll res=0;
		for(int j=m-1;j>=0;j--){
			for(int k=1;k<=m-j;k++){
				dp[k][k+j]=max(calc(k-1,k+j,true),calc(k,k+j+1,false));
				if(!j) res=max(res,dp[k][k]+a[k]*pw[m]);
			}
		}
		ans+=res;
	}
	printf("%d",ans);
	return 0;
}
2025/1/20 10:14
加载中...