蓝桥杯 算法提高 矩阵反转 疑问

lc18562312598 2017-03-25 09:10:02
知道问题是数据过大了,但是不懂应该用什么方法保存数据
#include<iostream>
#include<cmath>
using namespace std;
int n;
const int **a;
void sol1(int c,int d,int x)
{
for(int i=c;i<c+x;i++)
{
for(int j=d;j<d+x;j++)
{
a[i][j]*=-1;
}
}
}
void solve(int c,int d,int x)
{
int sum1=0;
int sum2=0;
if(c>n-x) return ;
for(int i=c;i<c+x;i++)
{
for(int j=d;j<d+x;j++)
{
if(a[i][j]<0)
sum1+=a[i][j];//负数和
if(a[i][j]>0)
sum2+=a[i][j];//正数和
}
}
if(sum1+sum2>=0)
{
if(d<n-x)
solve(c,d+1,x);
else solve(c+1,0,x);
}
if(sum1+sum2<0)
{
sol1(c,d,x);
if(d<n-x)
solve(c,d+1,x);
else
solve(c+1,0,x);
}
}
int main()
{

int sum=0;
cin>>n;
int**a=new int*[n];
for(int i=0;i<n;i++)
a[i]=new int[n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
int x=(n+1)/2;
solve(0,0,x);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
sum+=a[i][j];
// cout<<a[i][j]<<" ";
}
}
cout<<sum<<endl;
return 0;
}
...全文
295 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lc18562312598 2017-03-27
  • 打赏
  • 举报
回复
算法提高 矩阵翻转 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 Ciel有一个N*N的矩阵,每个格子里都有一个整数。 N是一个奇数,设X = (N+1)/2。Ciel每次都可以做这样的一次操作:他从矩阵选出一个X*X的子矩阵,并将这个子矩阵中的所有整数都乘以-1。 现在问你经过一些操作之后,矩阵中所有数的和最大可以为多少。 输入格式 第一行为一个正整数N。 接下来N行每行有N个整数,表示初始矩阵中的数字。每个数的绝对值不超过1000。 输出格式 输出一个整数,表示操作后矩阵中所有数之和的最大值。 样例输入 3 -1 -1 1 -1 1 -1 1 -1 -1 样例输出 9 数据规模与约定 1 <= N <= 33,且N为奇数。 题目忘了写了。。。
lc18562312598 2017-03-26
  • 打赏
  • 举报
回复
引用 1 楼 su20145104009 的回复:
题目都没、、
矩阵翻转。。打错了 ,adv-2 大佬
scx_white 2017-03-26
  • 打赏
  • 举报
回复
题目都没、、

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧