百練OJ 4150 上機

2021-09-13 17:58:19 字數 1744 閱讀 7991

總時間限制: 1000ms 記憶體限制: 65536kb

描述

又到週末了,同學們陸陸續續開開心心的來到機房上機。jbr也不例外,但是他到的有點晚,發現有些機位上已經有同學正在做題,有些機位還空著。細心的jbr發現,一位同學來到機房,坐在機位i上,如果他的左右兩邊都空著,他將獲得能力值a[i];如果當他坐下時,左邊或者右邊已經有乙個人在上機了,他將獲得能力值b[i];如果當他坐下時,他的左邊右邊都有人在上機,他將獲得能力值c[i]。

同時他發現,已經在上機的同學不會受到剛要坐下的同學的影響,即他們的能力值只會在坐下時產生,以後不會發生變化;第乙個機位左邊沒有機位,最後乙個機位右邊沒有機位,無論何時坐在這兩個機位上將無法獲得c值。

這時jbr發現有一排機器還空著,一共有n個機位,編號1到n。這時有n位同學們陸陸續續來到機房,乙個乙個按照順序坐在這排機位上。聰明的jbr想知道怎麼安排座位的順序,可以使這n位同學獲得能力值的和最大呢?

輸入

第一行乙個整數n(1<= n <= 10000)

第二行n個數,表示a[i]

第三行n個數,表示b[i]

第四行n個數,表示c[i]

(1<= a[i],b[i],c[i] <=10000)

輸出

乙個整數,表示獲得最大的能力值和

樣例輸入

4

1 2 2 4

4 3 3 1

2 1 1 2

樣例輸出

14
提示

第一位同學坐在第四個機位上,獲得能力值4;

第二位同學坐在第三個機位上,獲得能力值3;

第三位同學坐在第二個機位上,獲得能力值3;

第四位同學坐在第乙個機位上,獲得能力值4;

總和為14。

解題思路

該題用動態規劃解決。

首先找到動態方程dp:

假設dp[i][0]表示第i個位置左右都沒有人,dp[i][1]表示第i個位置左邊有人右邊沒人,dp[i][2]表示第i個位置右邊有人左邊沒人,dp[i][3]表示第i個位置左右都有人。那麼,

dp[i][0]=max(dp[i-1][2],dp[i-1][3])+a[i];

dp[i][1]=max(dp[i-1][0],dp[i-1][1])+b[i];

dp[i][2]=max(dp[i-1][2],dp[i-1][3])+b[i];

dp[i][3]=max(dp[i-1][0],dp[i-1][1])+c[i];

**:

#include#includeusing namespace std;

int dp[10001][4];

int main()

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

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

dp[1][0]=a[1];

dp[1][1]=0;

dp[1][2]=b[1];

dp[1][3]=0;

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

printf("%d\n",max(dp[n][0],dp[n][1]));

return 0;

}

之前一直執行超時,發現陣列開小了,把10001寫成了1001。

百練oj2816 紅與黑

總時間限制 1000ms 記憶體限制 65536kb 描述 有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸入包括多個資料集合。每個資料集合的第一行是兩個整數w和h,分別表示x方向和...

百練OJ 2815 城堡問題 DFS

1 2 3 4 5 6 7 1 2 3 4 圖 1 wall no wall no wall 圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成m n m 50,n 50 個方塊,每個方塊可以有0 4面牆。input 程式從標準輸入裝置讀入資料。第一行是...

百練OJ 4151 電影節

總時間限制 1000ms 記憶體限制 65536kb 描述 大學生電影節在北大舉辦 這天,在北大各地放了多部電影,給定每部電影的放映時間區間,區間重疊的電影不可能同時看 端點可以重合 問李雷最多可以看多少部電影。輸入 多組資料。每組資料開頭是n n 100 表示共n場電影。接下來n行,每行兩個整數 ...