社区讨论
关于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 条回复,欢迎继续交流。
正在加载回复...