社区讨论

T了两个点 求优化方法 玄关

P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@miha4ufs
此快照首次捕获于
2025/11/27 18:17
3 个月前
此快照最后确认于
2025/11/28 20:35
3 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int maxn = 81;
string dp[maxn][maxn][maxn];
string a[maxn][maxn];
string lg[maxn];
bool cmp(string a,string b){
	if(a.size() != b.size())return a.size()<b.size();
	return a<b;
}
string Max(string x,string y){
	if(cmp(x,y))return y;
	return x;
}
string cheng(string x,string y){
	int a[10005] = {},b[10005] = {},z[10005] =  {};
	for(int i = 0;i<x.size();i++)a[x.size()-i] = x[i]-'0';
	for(int i = 0;i<y.size();i++)b[y.size()-i] = y[i]-'0';
	int len = x.size()+y.size();
	for(int i = 1;i<=x.size();i++){
		for(int j = 1;j<=y.size();j++){
			z[i+j-1]+=a[i]*b[j];
			z[i+j]+=z[i+j-1]/10;
			z[i+j-1]%=10;
		}
	}
	while(z[len] == 0 && len>1)len--;
	string c;
	for(int i = len;i>=1;i--){
		c+=to_string(z[i]);
	}
	return c;
}
string jia(string x,string y){
	int a[1000] = {},b[1000] = {},z[1000] = {};
	for(int i = 0;i<x.size();i++)a[x.size()-i] = x[i]-'0';
	for(int i = 0;i<y.size();i++)b[y.size()-i] = y[i]-'0';
	int len = max(x.size(),y.size());
	for(int i = 1;i<=len;i++){
		z[i]+=a[i]+b[i];
		z[i+1]+=z[i]/10;
		z[i]%=10;
	}
	if(z[len+1])len++;
	string c;
	for(int i = len;i>=1;i--){
		c+=to_string(z[i]);
	}
	return c;
}
string qpow(string a,int b){
	string ans = "1";
	while(b>0){
		if(b&1)ans = cheng(ans,a);
		a = cheng(a,a);
		b/=2;
	}
	return ans;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,m;
	cin>>n>>m;
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i = 0;i<=80;i++){
		lg[i] = qpow("2",i);
	}
	string ans = "0";
	for(int rd = 1;rd<=n;rd++){
		for(int len = 1;len<=m;len++){
			for(int i = 1;i+len-1<=m;i++){
				int j = i+len-1;
				dp[rd][i][j] = Max(jia(dp[rd][i][j-1],cheng(a[rd][j],lg[m-j+i])),jia(dp[rd][i+1][j],cheng(a[rd][i],lg[m-j+i])));
			}
		}
		ans = jia(ans,dp[rd][1][m]);
	}
	cout<<ans;
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...