给定一个n*n整数矩阵,定义对I行的SHIFT操作( 0 <= i < n ),是将第I行所有元素都右移一位,最右边的移到最左边。
你可以对任意行进行任意次SHIFT操作,使得:
max0<=j< n{Cj|Cj=Σ0<=i< nAi,j}最小化。
输入:

有多个测试序列,每个测试序列第一行是一个整数n(1<=n<=7),表明矩阵的阶。后面n行每行n个整数,表示矩陈元素。n=-1表示输入结束,无需处理。

2
4 6
3 7
3
1 2 3
4 5 6
7 8 9
-1
输出:

最小值

11
15
解题思路:

不需要特殊的数据结构;从题目描述,数据的规模不大(n<8),算法采用暴力搜索。所有的可能情况都找出来:每一行都可能移0到n-1步,所以总的情况有nn 种,对每种情况进行编号。如n=7时,7进制的0123456表示第一行不动,第二行移动一次……

#include <stdio.h>
#include <math.h> int n;
int matrix[128][128];
int s[128];
void inttoseries(int i,int *s)
{
int j,k;
//函数将序号化为移动的序列
for(k=0,j=i;k<n-1;++k)
{
//二维数组并未移动,s[k]记录的偏移量,第一行未移动
s[k]=j%n;j/=n;
}
} int maxcolumn(int *s)
{
int max,i,j,temp;
// 函数返回在指定移动情况下的最大值。
for(max=matrix[0][0],i=1;i<n;++i)
max+=matrix[i][s[i-1]]; //计算第1列的和
for(i=1;i<n;++i)
{
for(j=1,temp=matrix[0][i];j<n;++j)
temp+=matrix[j][(s[j-1]+i)%n]; //计算第 i 列的和
if(temp>max)max=temp;
} return max;
} int main(){
int min,i,j,temp;
while(scanf("%d",&n),n+1)
{
for(i = 0;i<n;i++){
for(j = 0;j<n;j++){
scanf("%d",&matrix[i][j]);
}
}
inttoseries(0,s);
min=maxcolumn(s);
int k = (int)pow(n,n); //所有可能的情况共有n^n种
for(i=1;i<k;++i) //循环将遍历所有移动情况
{
inttoseries(i,s); //将i转换成移动编码s
temp=maxcolumn(s); //计算按照移动编码s进行移动所能取得的最大值
if(temp<min)min=temp;
}
printf("%d\n",min);
}
return 0;
}

搜索所有的路径-矩阵运算-暴力-ACM的更多相关文章

  1. Mine Number(搜索,暴力) ACM省赛第三届 G

    Mine Number Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Every one once played the gam ...

  2. 洛谷 P2196 挖地雷 & [NOIP1996提高组](搜索,记录路径)

    传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保 ...

  3. 从0开始学java——JSP&Servlet——web容器搜索class的路径顺序

    在web应用程序如果要用到某个类,会按照如下的顺序来搜索: 1)在WEB-INF/classes目录下搜索: 2)如果该目录下没有,则会到WEB-INF/lib目录下的jar文件中搜索: 3)如果还没 ...

  4. Nikita and string [思维-暴力] ACM

    codeforces Nikita and string time limit per test   2 seconds memory limit per test   256 megabytes O ...

  5. js图的数据结构处理----邻链表,广度优先搜索,最小路径,深度优先搜索,探索时间拓扑

    //邻居连表 //先加入各顶点,然后加入边 //队列 var Queue = (function(){ var item = new WeakMap(); class Queue{ construct ...

  6. 搜索专题:问题 E: 挑战ACM迷宫

    这是往年校赛的一道题,最开始做这道题的时候还没有系统的学习过搜索,用了C语言学的回溯法尝试,毫无疑问的TLE: 学习了DFS之后,自己的剪枝功力不够,又是TLE,最后学了BFS之后,哇,终于做出来了, ...

  7. Java import以及Java类的搜索路径

    如果你希望使用Java包中的类,就必须先使用import语句导入.import语句与C语言中的 #include 有些类似,语法为:    import package1[.package2-].cl ...

  8. Python 学习 第十五篇:模块搜索路径和包导入

    在导入自定义的模块时,除了指定模块名之外,也需要指定目录,由于Python把目录称作包,因此,这类导入被称为包导入.包导入把计算机上的目录变成Python的命名空间,而目录中所包含的子目录和模块文件则 ...

  9. Java知多少(9) import及Java类的搜索路径

    如果你希望使用Java包中的类,就必须先使用import语句导入. import语句与C语言中的 #include 有些类似,语法为:    import package1[.package2…].c ...

随机推荐

  1. MySQL基本配置

    >>添加环境变量 把MySQL Server的bin目录添加到系统path中. >>MySQL启动和停止命令 net start mysql56 net stop mysql5 ...

  2. XSS 简单理解之:AntiSamy

    AntiSamy介绍 OWASP是一个开源的.非盈利的全球性安全组织,致力于应用软件的安全研究.我们的使命是使应用软件更加安全,使企业和组织能够对应用安全风险作出更清晰的决策.目前OWASP全球拥有1 ...

  3. VM网络无法连接--提示ethernet0无法连接到虚拟网络

    打开 “编辑->虚拟网络设置"里面,点“恢复默认” 如果还不行 然后 开网络和共享中心 左击  本地连接(若是无线网络,则点击无线网络连接)----属性----共享---- 在:允许其 ...

  4. 【Android - 框架】之ButterKnife的使用

    ButterKnife可以省去控件findViewById的步骤,提高开发效率. 用法: 1.添加依赖: compile 'com.jakewharton:butterknife:5.1.1' 2.在 ...

  5. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(35)-文章发布系统②-构建项目

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(35)-文章发布系统②-构建项目 注:阅读本文,需要阅读本系列的之前文章 代码生成器下载地址(文章开头处) ...

  6. innodb 页分配

    [root@localhost test]# python /root/soft/py_innodb_page_info.py -v t1.ibdpage offset 00000000, page ...

  7. Qt 学习之路:Qt 简介

    Qt 是一个著名的 C++ 应用程序框架.你并不能说它只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件.使用 Qt,在一定程度上你获得的是一个“一站式”的解决方案:不再需要研究 S ...

  8. 面试时,问哪些问题能试出一个Android应用开发者真正的水平?

    一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大,需要一些技巧,这里我不局限于回答题主的问题,而是分享一下我个人关于如何做好Android技术面试的一些经验: 面试前的准备 ...

  9. Android(java)学习笔记202:Handler消息机制的原理和实现

     联合学习 Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系   1. 首先我们通过一个实例案例来引出一个异常: (1)布局文件activity_m ...

  10. 如何使用Jquery获取Form表单中被选中的radio值

     $("input[name='opType']:checked").val() -------此方法估计用的比较多,通俗易懂 $("input:radio:checke ...