ZOJ2418 Matrix

20 篇文章 0 订阅
Matrix

Time Limit: 2 Seconds       Memory Limit: 65536 KB

Given an n*n matrix A, whose entries Ai,j are integer numbers ( 0 <= i < n, 0 <= j < n ). An operation SHIFT at row i ( 0 <= i < n ) will move the integers in the row one position right, and the rightmost integer will wrap around to the leftmost column.

You can do the SHIFT operation at arbitrary row, and as many times as you like. Your task is to minimize


Input

The input consists of several test cases. The first line of each test case contains an integer n. Each of the following n lines contains n integers, indicating the matrix A. The input is terminated by a single line with an integer -1. You may assume that 1 <= n <= 7 and |Ai,j| < 104.


Output

For each test case, print a line containing the minimum value of the maximum of column sums.


Sample Input

2
4 6
3 7
3
1 2 3
4 5 6
7 8 9
-1


Sample Output

11
15


Source: Asia 2004, Shanghai (Mainland China), Preliminary



————————————————————————————————————

题目的意思是每一行可以任意移动求每列和的最大值的最小值

暴力DFS枚举行与行之间关系,可以开一个数组A保存每一行第一个数位置效率n^(n-1),求最小n^2 ,总共n^(n+1)


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <functional>
#include <bitset>
#include <string>

using namespace std;

#define LL long long
#define INF 0x3f3f3f3f

int a[10][10];
int ans[10];
int n,mn;

void dfs(int x)
{
    if(x==n)
    {
        int mx=-1;
        for(int i=0; i<n; i++)
        {
            int ans1=0;
            for(int j=0; j<n; j++)
            {
                int pos=ans[j]+i;
                if(pos>=n) pos-=n;
                ans1+=a[j][pos];
            }
            mx=max(ans1,mx);

        }
        mn=min(mn,mx);
        return;
    }
    for(int i=0; i<n; i++)
    {
        ans[x]=i;
        dfs(x+1);
    }
}

int main()
{
    while(~scanf("%d",&n))
    {
        if(n==-1)
            break;
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                scanf("%d",&a[i][j]);
        mn=INF;
        ans[0]=0;
        dfs(1);
        printf("%d\n",mn);
    }

    return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LabelMatrix软件提供了先进的条码设计,打印和数据库功能,可以满足您设计标签时的诸多要求,还提供了几百种热敏/热转印条码打印机的驱动,可以让您的打印机最大限度的发挥功能,在短时间内,不管是打印小批量的地址标签还是打印成千上万的产品标签,LabelMatrix可以胜任. @ 支持UCC/EAN 128码。 @ 接受打印过程交互数据,提供下拉数据列表 @ 双重数据检查,确保打印时输入的数据正确 @ 内嵌数据库工具,支持更多数据库格式 @ 支持PLANET CODE,支持UPS在线邮件跟踪系统 @ 支持更多种类热敏/热转印打印机 @ 详尽的图形条码。 @ 支持、WINDOWS下的脱机打印 @ 内置32位ODBC,可接开放式数据库,支持SQL。 @ 支持Zebra,Datamax,EltronTec,Stao,UBI,Printronix等详尽的打印机驱动。 @ 支持Windows打印机。 @ 可编程:支持与应用程序一体化。 @ 个性化外壳,可以自行设计界面或调用截面文件 @ 支持变量打印:计数器输入,日期/时间,公式 Labelmatrix软件分Labelmatrix PrintPack(LMPP)(只有打印功能,不能编辑、Labelmatrix QuickDraw (LMQD) (不含打印机驱动程序,2维条码打印功能)、LABEL MATRIX (LM)(标准版)、LABEL MATRIX NET (LMN)(网络版,功能同标准版,支持多用户)、LABEL MATRIX PowerPro (LMPP) (加强版,含OLE功能),客户可根据实际需求选择使用。 本站公提供Labelmatrix条形码打印软件免费下载,版权信息归属其软件公司或原作者所有。如果你喜欢,请支持正版!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值