三层for循环给我报TLE???
查看原帖
三层for循环给我报TLE???
1093260
xiaochenlailou楼主2024/6/24 08:10
#include <bits/stdc++.h>
using namespace std;
const int MAX = 83;
int n, m;
__int128 a[MAX];
__int128 dp[MAX][MAX];
__int128 p[MAX];
__int128 sum = 0;

inline int read() { //快读
	int s = 0, w = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-') {
			w = -1;
			ch = getchar(); /*读入的是负数*/
		}
	}
	while (ch >= '0' && ch <= '9') {
		s = (s << 3) + (s << 1) + ch - '0';
		ch = getchar();/**8 + *2 = *10*/
	}
	return s * w; //一定要乘以w,表示符号的意义
}

void print(__int128 x) {
	//int128的特殊输出
	if (x > 9)
		print(x / 10);
	putchar(x % 10 + '0');
}

void solve() {
	n = read();
	m = read();
	p[0] = 1;
	for (int i = 1; i <= m; i++)
		p[i] = 2 * p[i - 1];
	//首先计算一下需要的2的各个次幂
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= m ; j++)
			a[j] = read();
		//快读
		memset(dp, 0, sizeof(dp)); //初始化一下
		for (int i = 1; i <= m; i++) {
			dp[i][i] = a[i] * p[m];
		}
		for (int len = 1; len <= 4; len ++) {
			for (int i = 1; i <= m; i++) {
				dp[i][i + len] = max(a[i] * p[m - len] + dp[i + 1][i + len], dp[i][i + len - 1] + a[i + len] * p[m - len]);
			}
		}
		sum += dp[1][m]; //每行独立求解
		print(dp[1][m]);
		cout << endl;
	}
	if (sum == 0)
		putchar('0');
	else
		print(sum);
//A	int128输出最后的结果
}

signed main() {
	solve();
	return 0;
}
2024/6/24 08:10
加载中...