首页 > 代码库 > UVa 10755 Garbage Heap
UVa 10755 Garbage Heap
三维的形式下的最大子段问题
既然二维可以压缩成一维的情况,那么同样的,三维也可以压缩成一维转化成最大子段问题
枚举y和z的边界,压缩后在x轴上求最大子段,用ans记录最大值
时间复杂度是O(n^5),由于数据不算太大,所以不会超时
一直WA,一直WA,Orz
后来终于发现是输出格式的问题,每个输出之间都要加一个换行符,换行啊换行!你坑死窝了
为何反馈信息是WA而不是PE,真是误导人啊。=_=!!
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 8 const int maxn = 30; 9 long long cube[maxn][maxn][maxn], sum[maxn][maxn][maxn], a[maxn];10 const long long INF = 1LL << 60;11 12 int main(void)13 {14 #ifdef LOCAL15 freopen("10755in.txt", "r", stdin);16 #endif17 18 int T;19 scanf("%d", &T);20 while(T--)21 {22 int x, y, z;23 int i, j, k;24 scanf("%d%d%d", &x, &y, &z);25 for(i = 1; i <= x; ++i)26 for(j = 1; j <= y; ++j)27 for(k = 1; k <= z; ++k)28 scanf("%lld", &cube[i][j][k]);29 memset(sum, 0, sizeof(sum));30 for(i = 1; i <= x; ++i)31 for(j = 1; j <= y; ++j)32 for(k = 1; k <= z; ++k)33 sum[i][j][k] = sum[i][j-1][k] + sum[i][j][k-1] - sum[i][j-1][k-1] + cube[i][j][k];34 35 long long ans = -INF;36 for(int i1 = 1; i1 <= y; ++i1)37 for(int i2 = i1; i2 <= y; ++i2)38 for(int j1 = 1; j1 <= z; ++j1)39 for(int j2 = j1; j2 <= z; ++j2)40 {41 for(k = 1; k <= x; ++k)42 a[k] = sum[k][i2][j2] - sum[k][i1-1][j2] - sum[k][i2][j1-1] + sum[k][i1-1][j1-1];43 44 ans = max(a[1], ans);45 for(k = 2; k <= x; ++k)46 {47 a[k] = max(a[k], a[k] + a[k-1]);48 ans = max(ans, a[k]);49 }50 }51 52 printf("%lld\n", ans);53 if(T)54 printf("\n");55 }56 return 0;57 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。