UVA
来源:互联网 发布:淘宝装修页头图片素材 编辑:程序博客网 时间:2024/06/05 06:20
UVA - 507 Jill Rides Again(连续子序列最大和)升级版
题目大意:给出 n*n 的矩阵,找每隔数字之和最大的子矩阵,输出最大和。
解题思路:枚举矩阵左上和右下的坐标,分别合并子矩阵的每列,使得二维转化为一维,然后利用连续子序列最大和去做就行。
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>const int INF = 0x3f3f3f3f;const int NINF = -INF -1;using namespace std;int val[110][110];int sum[110];int N;int main() { while (scanf("%d", &N) != EOF) { for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) scanf("%d", &val[i][j]); int maxn = NINF; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { memset(sum, 0, sizeof(sum)); for (int k = i; k < N; k++) { int tmp = 0; for (int l = j; l < N; l++) { sum[l] += val[k][l]; if (tmp < 0) { tmp = 0; } tmp += sum[l]; if (tmp > maxn) { maxn = tmp; } } } } } printf("%d\n", maxn); }return 0;}
O(n
试着优化,删了一层 for,time(ms):0
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>const int INF = 0x3f3f3f3f;const int NINF = -INF -1;using namespace std;int val[110][110];int sum[110];int N;int main() { scanf("%d", &N); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) scanf("%d", &val[i][j]); int maxn = NINF; for (int i = 0; i < N; i++) { memset(sum, 0, sizeof(sum)); for (int j = i; j < N; j++) { int tmp = 0; for (int k = 0; k < N; k++) { sum[k] += val[j][k]; if (tmp < 0) { tmp = 0; } tmp += sum[k]; if (tmp > maxn) { maxn = tmp; } } } } printf("%d\n", maxn);return 0;}
阅读全文
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 从string类型的IP转换成四个int
- 终于等到你!MobileTest免费公测,华为带你走出安卓适配大坑
- 关于对H264码流的TS的封装的相关代码实现
- linux随机密码生成工具mkpasswd
- iOS 开发技巧 ---- Code Snippets代码块的使用
- UVA
- 解决ueditor上传图片在IE中的兼容问题
- Android 获取 H5中的按钮,点击
- 如何更好的理解矩阵
- Robot Framework执行碰到的问题
- 3.3将命令添加到解决方案资源管理器工具栏
- vuex学习总结
- day_14_信号量集、网络、socket模型
- shell进度条