今天連續更新三篇文章呢,習慣在文章前面寫一些無(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])