NOI 1101. 子矩阵求和(高效方法,解决超时问题)
来源:互联网 发布:双十一红包 淘宝联盟 编辑:程序博客网 时间:2024/06/04 01:33
NOI 1101.子矩阵求和,题目如下:此题目并不难,但是如果用双重循环或者递归求解时总是超时,所以用动态规划先把数据准备好.
代码如下:
#include<iostream>
using namespace std;
void fun_1101(){
int n, m;//n行m列
cin >> n >> m;
int** a = new int*[n+1];//矩阵数组
a[0] = new int[m];
for (int i = 1; i <= n; i++)
{
a[i] = new int[m]{0};
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];//矩阵数组读数据
}
}
// 第0行和第0列不是矩阵数据, 全置0是为了后面的通式不用判断
for (int i = 0; i <= n; i++)
{
a[i][0] = 0;
}
for (int i = 0; i <= m; i++)
{
a[0][i] = 0;
}
// 把矩阵a[i][j]转成表示左上角矩阵元素的和
//【1】按行迭代,求行的和
for (int i = 1; i <= n; i++)
{
for (int j = 2; j <= m; j++)
{
a[i][j] += a[i][j - 1];
}
}
//【2】按列迭代,求所有元素和
for (int i = 2; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
a[i][j] += a[i - 1][j];
}
}
int t;
cin >> t;
while (t--){
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
//最终矩阵和的公式(减去左边,减去右边,加上重复减的左上角)
int res = a[x2][y2] - a[x1-1][y2] - a[x2][y1-1] + a[x1-1][y1-1];
cout << res << endl;
}
}
int main()
{
fun_1101();
return 0;
}
- NOI 1101. 子矩阵求和(高效方法,解决超时问题)
- 最大子矩阵求和问题
- hdu 1081 最大子矩阵求和问题
- #1286 : 子矩阵求和
- 最大子矩阵求和
- hdu1081 To The Max_最大子矩阵求和问题
- [OpenJudge-NOI]最大子矩阵 贪心
- 求和最大的子矩阵
- Hihocoder-1286 子矩阵求和
- 动态规划解决最大子矩阵问题
- dp解决最大子矩阵问题
- njupt_oj:简单矩阵 :超时,求高效算法
- 【子矩阵】【高效算法设计】
- 二维树状数组--子矩阵求和
- 二维数组最大子矩阵的求和
- 【矩阵子阵求和问题】 leetcode 308. Range Sum Query 2D
- 解决PHP超时问题
- 解决数据库超时问题
- Pycharm设置行长为80(PEP8)
- ViewModel里的ICommand绑定时找不到问题
- 游戏化设计的精髓是结合用户历程进行UX设计
- Android Studio ADB网络调试总结
- mybatis的应用
- NOI 1101. 子矩阵求和(高效方法,解决超时问题)
- JVM原理及GC优化
- [DP] BZOJ1090: [SCOI2003]字符串折叠
- 21个数据科学家面试必须知道的问题和答案
- JVM 垃圾收集器与内存分配策略
- C++STL标准模板库
- 驱动调试--SPI通信深入解析
- Python模块学习:atexit
- c 语言 offsetof 函数