A Game hiho一下第173周

2021-08-09 18:38:55 字數 1405 閱讀 1592

題意:小 ho 和小 hi 在玩遊戲,給定乙個數字串,每人每次從該串的開頭或結尾選取乙個數,直到選完為止,最後選取數字之和較大的那個人獲勝。其中小 ho 先手。求小 ho 能獲得的最大分數。

思路:由樣例可以看出,每次選取首尾中較大的數的這個貪心策略是錯誤的。 設 f

[i][

i]表示對於 a[

i,..

.,j]

數字串的先手能夠獲得的最大分數。

當 i==j 時,則 f[

i][i

]=a[

i];

當 i < j 時,則先手可能選擇 a[

i]或者 a[

j]。如果先手選擇 a[

i],則後手得到的數字串是 a[

i+1,

...,

j],對應的後手能從該數字串中得到 f[

i+1]

[j] 的最大分數。則後手肯定會按照能夠獲得最大分數的決策進行下一步選擇,則此時先手能夠獲得的最大分數就是 ∑k

=i−>ja

[k]−

f[i+

1][j

] 。如果先手選擇 a[

j]同理。

所以最終 f[

i][j

]=ma

x(∑k

=i−>ja

[k]−

f[i+

1][j

],∑k

=i−>ja

[k]−

f[i]

[j−1

])。**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

int n;

int a[1010];

int f[1010][1010];

int s[1010][1010];

int main()

for(int i=0; ifor(int j=i; jif(i == j) s[i][j] = a[i];

else}}

for(int i=0; ifor(int len=2; len<=n; len++)

}printf("%d\n", f[0][n-1]);

}return

0;}

Binary Watch hiho一下 第181周

題意 考慮用 5 位二進位制數表示小時,6 位二進位制數表示分鐘,然後把它轉換成十進位制,例如 01011 011010 11 26 輸入為二進位制表達中 1 的個數,要求輸出所有可能的二進位制表達的十進位制形式。例如,輸入為 1 00000 000001 00 01 00000 000010 00...

hiho一下第143周

題目1 hiho密碼 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 小ho根據最近在密碼學課上學習到的知識,開發出了一款hiho密碼,這款密碼的秘鑰是這樣生成的 對於一種有n個字母的語言,選擇乙個長度為m的單詞 將組成這個單詞的所有字母按照順序不重複的寫出 即遇到相...

hiho一下 第197周 逆序單詞

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 在英文中有很多逆序的單詞,比如dog和god,evil和live等等。現在給出乙份包含n個單詞的單詞表,其中每個單詞只出現一次,請你找出其中有多少對逆序單詞。第1行 1個整數,n,表示單詞數量。2 n 50,000。第2.n ...