我有以下任務:寫入正整數 N (2≤N≤100)。每個數字不超過 200。兩個玩家玩。對于每一步,您可以在左側或右側劃掉極數。劃掉的數字被添加到玩家的分數中。N - 偶數。第一個玩家開始游戲。如果對手表現最好,則有必要為第一個玩家提取盡可能多的積分。
IN:輸入檔案的第一行包含一個數字 N。接下來的 N 行包含初始數字系列,每行一個數字。
6
4
7
2
9
5
2
出去:
18
我知道這個問題是通過動態編程解決的。我將自己撰寫代碼,但是可以籠統地描述策略嗎?
uj5u.com熱心網友回復:
使用動態規劃制表,您可以從游戲結束時開始,其中“桌面上”只剩下一個值。以該值的索引為鍵,記錄下一個動作的玩家可以得分多少。顯然,該分數等于該值本身。另一個玩家得分為 0。
然后將值的“切片”再擴展一個:對于每一對連續的對,考慮當前玩家可以選擇任何一個。在這兩種情況下,我們最終都會得到一個已經列在表格中的狀態,并且為對手提供了最好的分數。您可以使用首先獲得的值來增加相關分數,并且可以查看兩個動作中的哪一個最適合正在玩的玩家。忘記其他動作,然后再次通過表上最左側值的索引來獲得一個新表。
像這樣繼續擴展切片,始終建立在為前一個切片長度列出的分數之上。
最后,您將得出整個系列數字的分數和最佳移動。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523831.html
標籤:算法动态规划
下一篇:用戶輸入轉義字符時無法提取值
