動歸 道路遊戲

2022-03-21 07:13:01 字數 2116 閱讀 7191

【題目描述】

小新正在玩乙個簡單的電腦遊戲。

遊戲中有一條環形馬路,馬路上有n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這n 個機械人工廠編號為1~n,因為馬路是環形的,所以第n 個機械人工廠和第1 個機械人工廠是由一段馬路連線在一起的。小新將連線機械人工廠的這n 段馬路也編號為1~n,並規定第i 段馬路連線第i 個機械人工廠和第i+1 個機械人工廠(1 ≤ i ≤ n-1),第n 段馬路連線第n 個機械人工廠和第1個機械人工廠。

遊戲過程中,每個單位時間內,每段馬路上都會出現一些金幣,金幣的數量會隨著時間發生變化,即不同單位時間內同一段馬路上出現的金幣數量可能是不同的。小新需要機械人的幫助才能收集到馬路上的金幣。所需的機械人必須在機械人工廠用一些金幣來購買,機械人一旦被購買,便會沿著環形馬路按順時針方向一直行走,在每個單位時間內行走一次,即從當前所在的機械人工廠到達相鄰的下乙個機械人工廠,並將經過的馬路上的所有金幣收集給小新,例如,小新在i(1 ≤ i ≤ n)號機械人工廠購買了乙個機械人,這個機械人會從i 號機械人工廠開始,順時針在馬路上行走,第一次行走會經過i 號馬路,到達i+1 號機械人工廠(如果i=n,機械人會到達第1 個機械人工廠),並將i 號馬路上的所有金幣收集給小新。遊戲中,環形馬路上不能同時存在2 個或者2 個以上的機械人,並且每個機械人最多能夠在環形馬路上行走p 次。小新購買機械人的同時,需要給這個機械人設定行走次數,行走次數可以為1~p 之間的任意整數。當馬路上的機械人行走完規定的次數之後會自動消失,小新必須立刻在任意乙個機械人工廠中購買乙個新的機械人,並給新的機械人設定新的行走次數。

以下是遊戲的一些補充說明:

遊戲從小新第一次購買機械人開始計時。

購買機械人和設定機械人的行走次數是瞬間完成的,不需要花費時間。

購買機械人和機械人行走是兩個獨立的過程,機械人行走時不能購買機械人,購買完機械人並且設定機械人行走次數之後機械人才能行走。

在同乙個機械人工廠購買機械人的花費是相同的,但是在不同機械人工廠購買機械人的花費不一定相同。

購買機械人花費的金幣,在遊戲結束時再從小新收集的金幣中扣除,所以在遊戲過程中小新不用擔心因金幣不足,無法購買機械人而導致遊戲無法進行。也因為如此,遊戲結束後,收集的金幣數量可能為負。

現在已知每段馬路上每個單位時間內出現的金幣數量和在每個機械人工廠購買機械人需要的花費,請你告訴小新,經過m 個單位時間後,扣除購買機械人的花費,小新最多能收集到多少金幣。

【輸入格式】

第一行 3 個正整數,n,m,p,意義如題目所述。

接下來的 n 行,每行有m 個正整數,每兩個整數之間用乙個空格隔開,其中第i 行描述了i 號馬路上每個單位時間內出現的金幣數量(1 ≤ 金幣數量≤ 100),即第i 行的第j(1 ≤ j ≤m)個數表示第j 個單位時間內i 號馬路上出現的金幣數量。

最後一行,有 n 個整數,每兩個整數之間用乙個空格隔開,其中第i 個數表示在i 號機械人工廠購買機械人需要花費的金幣數量(1 ≤ 金幣數量≤ 100)。

【輸出格式】

包含1 個整數,表示在m 個單位時間內,扣除購買機械人花費的金幣之後,小新最多能收集到多少金幣。

【樣例輸入】

2 3 2

1 2 3

2 3 4

1 2【樣例輸出】

【分析】

step[i][j]表示i時刻,到達j這個地方用最優情況所用的步數。

f[i][j]表示用最優方法,i時刻到達j所能擁有的最多錢數。

past_max表示前一時刻的最大的f[...][j]。

now_max表示現在時刻最大的f[...][j]。

#include #define maxn 1010

int f[maxn][maxn],step[maxn][maxn],past[maxn],cost[maxn],w[maxn][maxn];

int n,m,p,past_max,now_max;

int main()

for (int i = 2;i <= m;++i) else

else

if (f[i][j] > now_max)

now_max = f[i][j];

}past_max = now_max;

} printf("%d\n",now_max);

return 0;

}

noip2003 數字遊戲 (區間動歸)

丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...

整數劃分(動歸)

將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數量mod 10 9 7。sample input6sample output4 include incl...

動歸 編輯距離

設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元 皆為小寫字母!輸入格式 第一行為字串a 第二行為字串b 字串a和b的長度均小於2000。輸出格式 只有乙個正整數,為最少字元操作次數。輸...