问题 5479. -- 物品传递-【2014暑期训练】T5Day2T2

5479: 物品传递-【2014暑期训练】T5Day2T2

时间限制: 1 Sec  内存限制: 256 MB
献花: 11  解决: 6
[献花][花圈]

题目描述

物品传递

【问题描述】

n个人在做传递物品的游戏,人的编号为1到n。

游戏规则如下:

(1)开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位;

(2)当前接到物品的人可以将物品传递给未接到过物品的任意一人。

即物品只能经过同一个人一次,而且每次传递过程都有一个代价。

求当物品经过所有n个人后,整个过程的总代价是多少。

【文件输入】

第一行为n,表示共有n个人(16>=n>=2);

以下为n*n的矩阵,第i+1行、第j列表示物品从编号为i的人传递到编号为j的人所花费的代价,特别的有第i+1行、第i列为-1(因为物品不能自己传给自己),其他数据均为正整数(<=10000)。

【文件输出】

一个数,为最小的代价总和。

【输入样例】

4

-1 9998 9997 9999

9999 -1 9997 9997

9997 9999 -1 9998

9999 9998 9999 -1

【输出样例】

29992

【数据规模】

对于50%的数据,n<=11;

对于100%的数据,n<=16。

输入

输出

提示










去掉最后一位 | (101101->10110) | x shr 1



  在最后加一个0 |
(101101->1011010) | x shl 1



  在最后加一个1 |
(101101->1011011) | x shl 1+1



  把最后一位变成1 |
(101100->101101) | x or 1



  把最后一位变成0 |
(101101->101100) | x or 1-1



  最后一位取反 | (101101->101100) | x xor 1



  把右数第k位变成1 |
(101001->101101,k=3) | x or (1 shl (k-1))



  把右数第k位变成0 |
(101101->101001,k=3) | x and not (1 shl (k-1))



  右数第k位取反 |
(101001->101101,k=3) | x xor (1 shl (k-1))



  取末三位 | (1101101->101) | x and 7



  取末k位 |
(1101101->1101,k=5) | x and (1 shl k-1)



  取右数第k位 |
(1101101->1,k=4) | x shr (k-1) and 1



  把末k位变成1 | (101001->101111,k=4) | x or (1 shl k-1)



  末k位取反 |
(101001->100110,k=4) | x xor (1 shl k-1)



  把右边连续的1变成0 |
(100101111->100100000) | x and (x+1)



  把右起第一个0变成1 |
(100101111->100111111) | x or (x+1)



  把右边连续的0变成1 |
(11011000->11011111) | x or (x-1)



  取右边连续的1 | (100101111->1111) | (x
xor (x+1)) shr 1



  去掉右起第一个1的左边 |
(100101000->1000) | x and (x xor (x-1))



  最后这一个在树状数组中会用到。



  PascalC中的16进制表示



  Pascal中需要在16进制数前加$符号表示,C中需要在前面加0x来表示。这个以后我们会经常用到。



来源

[献花][花圈]