2013通化邀請賽H題

2021-06-16 18:49:12 字數 966 閱讀 5018

這題真無語,比賽時不會做,想了一場貪心演算法,沒想到是個區間dp,白刷了那麼多dp!

比完賽回來,聽說是個區間dp,終於把題a了,但**寫得很搓,也不太好理解。後來發現這題竟然是白書上的例題!!!真是哭了

發現白書上記憶化搜尋的寫法很優雅,也比較好理解,就寫乙個吧。才50行的**!

dp[a][b][c][d]表示區間【a,b】,【c,d】先手能取到的最大值。

dp[a][b][c][d]=s-min(dp[a+1][b][c][d],dp[a][b-1][c][d],dp[a][b][c+1][d],dp[a][b][c][d-1])  s是[a,b],[c,d]區間所有的數之和

用記憶化搜尋來寫可以解決當一堆數取完,另一堆數沒取完的問題,遞推不是很好處理。

/*

* h.cpp

* * created on: 2013-5-28

* author: zy

*/#include#include#includeusing namespace std;

int x[21], y[21], t, n, s1[21], s2[21];

int dp[22][22][22][22];

const int inf = 0x3f3f3f3f;

int dfs(int a, int b, int c, int d)

if (c <= d)

dp[a][b][c][d] = s1[b] - s1[a - 1] + s2[d] - s2[c - 1] - m;

return dp[a][b][c][d];

}int main()

for (int i = 1; i <= n; i++)

memset(dp, 0, sizeof(dp));

printf("%d\n", dfs(1, n, 1, n));

} return 0;

}

通化邀請賽 I Difference

這個題目現場賽的時候沒過,想得過於簡單了。主要條件如下 a ai t for all i and b vi,vj in e ai aj t,首先,如過存在邊,那麼ai和aj必然一正一負。所以第一步就是黑白染色。之後不妨假設黑色的為正,白色為負,此時條件b中的絕對值號就可以去掉了。對於一堆的大於等於的...

2013 吉林通化邀請賽 Tutor 有點坑的水題

計算12個數的和的平均數。四捨五入,不能有後導0。我的做法是,將答案算出後,乘以1000,然後看個位是否大於等於5,判斷是否要進製 include include include include includeusing namespace std define eps 1e 2 int main ...

2013長沙邀請賽Travel in time

題意 給乙個無向圖和時間限制,景點到景點需要時間,每遊覽乙個景點會得到相應價值也會花費相應時間,而且你下乙個遊覽的景點的價值必須比現在的大。求從起始景點到結束景點獲得的最大價值。你可以路過任意乙個景點而不遊覽,這樣也不花費時間。首先,肯定要求出景點間的最短距離,因為任意景點都可以只路過,所以增加乙個...