今天连续更新三篇文章呢,习惯在文章前面写一些无(fei)关(hua)紧(lian)要(pian)的东西。
训练赛到最后也没有水过去,真是伤心,精度卡得很死,当时要是用decimal可能就OK了,本来想实验的,但是zoj好像开不了。
题目的意思就是最多十条题目,找一个最优排列,并输出期望,每道题的期望max(matrix[][j])。
用状态压缩搞出排列2^10,再dp,dp比较明显。
写的代码是py,也就是20行代码,但是理解倒不容易。
import sys
T=int(sys.stdin.readline())
for cases in xrange(T):
n=int(sys.stdin.readline())
dp,s,mtr=[0]+[-1.0]*(1<<n) ,['']*(1<<n),[]
eps,end=1e-10,(1<<n)-1
for i in xrange(n):
mtr.append(sys.stdin.readline().strip().split(' '))
for i in xrange(n):
for j in xrange(n):
mtr[i][j]=int(mtr[i][j])/100.0
for i in xrange(1,end+1):
for j in xrange(n):
if i & (1<<j):
p,m=0.0 , i-(1<<j)
for k in xrange(n):
p=max(p,mtr[k][j]) if i & (1<<k) else p
if dp[i] +eps < dp[m]+p or dp[i] - eps < dp[m]+p and s[i] > s[m]:
dp[i],s[i]= dp[m]+p,s[m]+chr(65+j)
print '%.2f\n%s'%(dp[end],s[end])