時間限制:c/c++
1秒,其他語言2秒
空間限制:c/c++
131072k,其他語言262144k
64bit io format:
%lld
小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。
烏龜棋的棋盤是一行n 個格仔,每個格仔上乙個分數(非負整數)。棋盤第1 格是唯一的起點,第n 格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。
![在這裡插入描述](
烏龜棋中m 張爬行卡片,分成4 種不同的型別(m 張卡片中不一定包含所有4 種型別的卡片見樣例),每種型別的卡片上分別標有1、2、3、4 四個數字之一,表示使用這種卡片後,烏龜棋子將向前爬行相應的格仔數。遊戲中,玩家每次需要從所有的爬行卡片中選擇一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格仔數,每張卡片只能使用一次。遊戲中,烏龜棋子自動獲得起點格仔的分數,並且在後續的爬行中每到達乙個格仔,就得到該格仔相應的分數。玩家最終遊戲得分就是烏龜棋子從起點到終點過程中到過的所有格仔的分數總和。
很明顯,用不同的爬行卡片使用順序會使得最終遊戲的得分不同,小明想要找到一種卡片使用順序使得最終遊戲得分最多。
現在,告訴你棋盤上每個格仔的分數和所有的爬行卡片,你能告訴小明,他最多能得到多少分嗎?
輸入描述:
第1行2個正整數n和m,分別表示棋盤格仔數和爬行卡片數。
第2行n個非負整數,a1, a2, ……, an,其中ai表示棋盤第i個格仔上的分數。
第3行m個整數,b1,b2, ……, bm,表示m張爬行卡片上的數字。
輸入資料保證到達終點時剛好用光m張爬行卡片,即n-1=
輸出描述:
輸出只有1行,1個整數,表示小明最多能得到的分數。
示例1輸入
複製
956
101428
818517
1312
1
輸出
複製
73
說明
小明使用爬行卡片順序為1,1,3,1,2,得到的分數為6+10+14+8+18+17=73。注意,
由於起點是1,所以自動獲得第1格的分數6。
示例2輸入
複製
1384
9610
6455
1394535
2489830
1111
1241
輸出
複製
455
備註:
動態規劃
dp[i][j][k][l]表示卡片1用了i張,卡片2用了j張,一次類推,用了這些卡牌的情況下所取得的最高分
那當前所在格仔就是i1+j2+k3+l4
得到轉移方程:
dp[i][j][k][l]=max(dp[i−1][j][k][l],dp[i][j−1][k][l],dp[i][j][k−1][l],dp[i][j][k][l−1])+a[i×1+j×2+k×3+l×4]
第i×1+j×2+k×3+l×4格仔的分數
#include
typedef
long
long ll;
using
namespace std;
const
int maxn=50;
int dp[maxn]
[maxn]
[maxn]
[maxn]
;int num[10]
;int a[
1000];
intmain()
dp[0]
[0][
0][0
]=a[0]
;//切勿忘記起始格
for(
int i=
0;i<=num[1]
;i++)}
}}printf
("%d\n"
,dp[num[1]
][num[2]
][num[3]
][num[4]
]);return0;
}
牛客網 每日一題 5月27日題目精講 貨幣系統
在的國度中共有n種不同面額的貨幣,第i種貨幣的面額為a i 你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為n 面額陣列為a 1 n 的貨幣系統記作 n,a 在乙個完善的貨幣系統中,每乙個非負整數的金額x 都應該可以被表示出,即對每乙個非負整數x,都存在n個非負整數t i 滿足a i x...
牛客網 每日一題 7月23日題目精講 wpy的請求
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k special judge,64bit io format lld題目描述 題目名稱只是吸引你來做題的啦,其實和題目沒什麼卵關係 o o 歷史 殿堂 輸入描述 第一行兩個整數n,m,表示有n個點,m條邊。...
牛客網 每日一題 4月14日題目精講 Xorto
傳送時間限制 c c 2秒,其他語言4秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 給定乙個長度為n的整數陣列,問有多少對互不重疊的非空區間,使得兩個區間內的數的異或和為0。輸入描述 第一行乙個數n表示陣列長度 第二行n個整數表示陣列 1 n 10...