跪求这道C++编程题怎么做,毫无思路啊

 我来答
1812573723
推荐于2016-02-15 · TA获得超过2355个赞
知道小有建树答主
回答量:943
采纳率:88%
帮助的人:873万
展开全部
//把矩阵每一行位移0~6次,所有情况都求一遍就行了,n才只有7.
#include<iostream>

using namespace std;
int a[7][7];

int main()
{
int n;
cin >> n;
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
cin >> a[i][j];
int ans=70000;
for (int move1=0; move1<=6; move1++)
for (int move2=0; move2<=6; move2++)
for (int move3=0; move3<=6; move3++)
for (int move4=0; move4<=6; move4++)
for (int move5=0; move5<=6; move5++)
for (int move6=0; move6<=6; move6++)
{
int maxsum=0;
for (int j=0; j<=6; j++)
{
int sum=a[0][j]+a[1][j+move1]+a[2][j+move2]+a[3][j+move3]
   +a[4][j+move4]+a[5][j+move5]+a[6][j+move6];
if (maxsum<sum) maxsum=sum;
}
if (ans>maxsum) ans=maxsum;
}
cout << ans << endl;
}
//如果你学过递归什么的,就把那六层循环用递归重写。
//以及我只写了处理一次数据的,如果你要解决问题,应该添加对多组数据的处理。
追答
经评论提醒,代码中的j+move都应该改为(j+move)%7,否则会出现数组越界的情况。
匿名用户
2015-12-14
展开全部
所有情况遍历一次时间复杂度O(m^n)肯定不行的呀...
令sum[]是每列和的数组, 对sum[]赋初值为输入的矩阵mat[][]的第1行的值, 同时求sum[]中元素的最大值minSumMax
从第二行开始, 尝试左移n次, 求sum[]与当前行每列的和tmpSum[], 求tmpSum[]中元素最大值tmpSumMax, 同时记minTmpSumMax, 当tmpSumMax < minTmpSumMax时, 将tmpSum[]复制为minTmpSum[], 最后用minTmpSum[]覆盖sum[]
这样共尝试了m*n次, 只要从第二行开始都保持每行左移n次后使得minSumMax最小就可以
追问
这个思路怎么写出来呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8ce788f
2015-12-14 · TA获得超过687个赞
知道小有建树答主
回答量:850
采纳率:80%
帮助的人:201万
展开全部
应该是与八皇后类似的吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式