1153 道路遊戲

2022-05-03 11:54:15 字數 2678 閱讀 1435

2023年noip全國聯賽普及組

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

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

遊戲中有一條環形馬路,馬路上有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 之間的任意整數。當馬路上的機械人行走完規定的次數之後會自動消失,小新必須立刻在任意乙個機械人工廠中購買乙個新的機械人,並給新的機械人設定新的行走次數。

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

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

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

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

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

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

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

輸入描述 input description

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

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

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

輸出描述 output description

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

樣例輸入 sample input

2 3 2

1 2 3

2 3 4

1 2樣例輸出 sample output

資料範圍及提示 data size & hint

資料範圍

對於 40%的資料,2 ≤ n ≤ 40,1 ≤m≤ 40。

對於 90%的資料,2 ≤ n ≤ 200,1 ≤m≤ 200。

對於 100%的資料,2 ≤ n ≤ 1000,1 ≤m≤ 1000,1 ≤ p ≤m。

分類標籤 tags 點此展開 

noip全國聯賽普及組

大陸地區

2023年

思路基本上對,結果爆零

忘了考慮1<-n的轉移

#include#include

using

namespace

std;

#define n 210

intn,m,p;

inta[n][n],cost[n];

inttim[n],f[n][n];

int ans=-0x7fffffff

;void

dp()}}

printf(

"%d\n

",ans);

}int

main()

}for(int i=1;i<=n;i++) scanf("

%d",cost+i);

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

}dp();

return0;

}

題解:

f(i,j)代表第i個時間走到第j個位置得到的最大金幣數,有n^2個狀態(因為n和m的上界相等,所以後邊都用n代替),對每個狀態列舉p,這樣複雜度是o(n^3),能得90分

f(i,j)=max

}}

printf("%d

",f[m]);

return0;

}

動歸 道路遊戲

題目描述 小新正在玩乙個簡單的電腦遊戲。遊戲中有一條環形馬路,馬路上有n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這n 個機械人工廠編號為1 n,因為馬路是環形的,所以第n 個機械人工廠和第1 個機械人工廠是由一段馬路連線在一起的。小新將連...

P1070 道路遊戲

小新正在玩乙個簡單的電腦遊戲。遊戲中有一條環形馬路,馬路上有 n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這 n 個機械人工廠編號為1 n,因為馬路是環形的,所以第 n 個機械人工廠和第 1 個機械人工廠是由一段馬路連線在一起的。小新將連線...

NOIP2009 道路遊戲

小新正在玩乙個簡單的電腦遊戲。遊戲中有一條環形馬路,馬路上有 n n n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這 n n n 個機械人工廠編號為 1 n 1 n 1 n,因為馬路是環形的,所以第 n n n 個機械人工廠和第 1 1 1...