社区讨论

关于maxx的初始值

P1043[NOIP 2003 普及组] 数字游戏参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lo10zf96
此快照首次捕获于
2023/10/22 13:25
2 年前
此快照最后确认于
2023/11/02 12:56
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int dp1[120][120][120],dp2[120][120][120],sum[1145];
int a[1145],n;
int dfs1(int l, int r, int m) {
	if (dp1[l][r][m]!=-1)return dp1[l][r][m];
	if (m == 1)return dp1[l][r][1] = (sum[r] - sum[l - 1])%10;
	int ans = 1e9;
	for (int i = l; i <r; i++) {
		for (int len = 1; len < m; len++) {
			ans = min(ans, (dfs1(l, i, len)*dfs1(i + 1, r, m - len)));
		}
	}
	return dp1[l][r][m] = ans;
}
int dfs2(int l, int r, int m) {
	if (dp2[l][r][m]!=-1)return dp2[l][r][m];
	if (m == 1)return dp2[l][r][1] = (sum[r] - sum[l - 1]) % 10;
	int ans = 0;
	for (int i = l; i < r; i++) {
		for (int len =1; len<m; len++) {
			ans = max(ans, (dfs2(l, i, len) * dfs2(i + 1, r, m - len)));
		}
	}
	return dp2[l][r][m] = ans;
}
signed main() {
	memset(dp1, -1, sizeof(dp1)); memset(dp2, -1, sizeof(dp2));
	int  m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		if (a[i] < 0)a[i] += 10000;
		a[i] %= 10;
		a[i + n] = a[i];
	}
	for (int i = 1; i <= n * 2; i++)sum[i] = sum[i - 1] + a[i];
	for (int i = 1; i <= n; i++) {
		dfs1(i, n + i-1, m);
		dfs2(i, n + i-1, m);
	}
	int minn = 1e9, maxx = -1e9;
	for (int i = 1; i <= n; i++) {
		minn = min(minn,dp1[i][i + n-1][m]);
		maxx = max(maxx, dp2[i][i + n-1][m]);
	}
	cout << (minn>0?minn:0) << endl << maxx;
}
为什么第19行的ans=0改为ans=-1e9就会错?(这份代码能AC)我试着把他改为ans=-100也会WA,ans=-10却没问题,请问各位大佬这是为什么?

回复

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

正在加载回复...