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 第一行乙個...