HRBUST 1473 教主的遺產 狀態壓縮

2022-08-21 22:39:08 字數 1447 閱讀 4375

description

恭送教主!

教主在2023年7月19日上午10:48,坐上前往北京的火車,從此開始了高富帥的生活。

在教主的的大學四年acm生涯中,他用事實告訴我們,要想在比賽拿獎,除了平時的刻苦努力外,很大一部分還要依賴比賽時是

做題策略,簡單來講就是做題順序,唯有想把能過的都過掉,然後再過難題,這樣才能在比賽中拿獎。

我們將用這個做題順序量化表示,即ac係數,ac係數越大,拿獎可能性就越大。

在比賽中會給出n個題,不同做題順序會有不同的ac係數,假如a先做,b後做的話,b對a的ac係數為4, 反過來 b先做,a後做的話,a對b的ac係數為5,說明先做b後做a將得到更高的ac係數。

設sij表示第i題在第j題做完後才做獲得的ac係數,有三道題a, b, c,做題順序為bac,則係數和為:sum = sab + scb + sca。

求乙個做題順序,使得ac係數和最大。

input

有多組測試資料。

對於每組測試資料,第一行為n(1<=n<=16),表示題目數量。

接下來有n行,每行n個數字,對於1+i行的第j個數字sij(0 <= sij <= 32), 表示第i題在第j題之後做的ac係數。

output

每組測試資料輸出一行,包含乙個數,為最大係數和。

sample input10

20 2 4 0

30 2

4 4 0 25

17 15 0

sample output04

46解題思路:例如做題順序為abcd時sum=sba+sca+sda+scb+sdb+sdc;而不是sum=sba+scb+sdc+sda;

dp[i][state]:表示state集合裡最後做i題的得分,i屬於state

map[n][n]:儲存題意的原圖

f[i][state]:表示i不在state集合,最後做i題得分

那麼狀態轉移方程為:狀態轉移方程dp[i][state]=max(dp[k][state-i])+f[i][state];

**如下:

view code

#include#include

#include

using

namespace

std;

#define n 17

#define m 1<<17

intdp[n][m], map[n][n], f[n][m];

intmain()

}for(state=0; state)}}

for(state=0; state)

for(k=0; k)}}

int maxnum=0

;

for(i=0; i)

printf(

"%d\n

", maxnum);

}}

NDK1473(植物擺放)

高精度乘法 數學公式的推導能力 分析 1 根據題意可分析出土豆火箭一定安排在一起且土豆在前。2 計算出放置多少個火箭使殭屍的傷害值最大。設放置k個火箭 則土豆的個數為n k。k確定了傷害值也就定了。n k個土豆的傷害為 a k b 1 n k k個火箭的傷害為a k 2 a k 1 k 2 1 a ...

1473 出棧順序的判定

棧的特點是後進先出,假設入棧的順序是 1 2 3 4 5,出棧的順序是 4 5 3 2 1,這樣操作的順序是 push 1,push 2,push 3,push 4,pop 4,push 5 pop 5,pop 3,pop 2,pop 1。假設出棧的順序是4 5 3 1 2,這種順序是錯誤的,因為1...

NCSTOJ 1473 陣列的度

示例 1 輸入 1,2,2,3,1 輸出 2 解釋 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2.連續子陣列裡面擁有相同度的有如下所示 1,2,2,3,1 1,2,2,3 2,2,3,1 1,2,2 2,2,3 2,2 最短連續子陣列 2,2 的長度為2,所以返回2.input 第一行乙個...