国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CODEVS 1068 烏龜棋

2019-11-08 20:00:40
字體:
來源:轉載
供稿:網友

題目描述

小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。 烏龜棋的棋盤是一行N個格子,每個格子上一個分數(非負整數)。棋盤第1格是唯一 的起點,第N格是終點,游戲要求玩家控制一個烏龜棋子從起點出發走到終點。

…… 1 2 3 4 5 ……N 烏龜棋中M張爬行卡片,分成4種不同的類型(M張卡片中不一定包含所有4種類型 的卡片,見樣例),每種類型的卡片上分別標有1、2、3、4四個數字之一,表示使用這種卡 片后,烏龜棋子將向前爬行相應的格子數。游戲中,玩家每次需要從所有的爬行卡片中選擇 一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格子數,每張卡片只能使用一次。 游戲中,烏龜棋子自動獲得起點格子的分數,并且在后續的爬行中每到達一個格子,就得到 該格子相應的分數。玩家最終游戲得分就是烏龜棋子從起點到終點過程中到過的所有格子的 分數總和。 很明顯,用不同的爬行卡片使用順序會使得最終游戲的得分不同,小明想要找到一種卡 片使用順序使得最終游戲得分最多。 現在,告訴你棋盤上每個格子的分數和所有的爬行卡片,你能告訴小明,他最多能得到 多少分嗎?

輸入描述

輸入的每行中兩個數之間用一個空格隔開。 第1行2個正整數N和M,分別表示棋盤格子數和爬行卡片數。 第2行N個非負整數,a1a2……aN

,其中ai表示棋盤第i個格子上的分數。 第3行M個整數,b1b2……bM

,表示M張爬行卡片上的數字。 輸入數據保證到達終點時剛好用光M張爬行卡片,即N - 1=∑(1->M) bi

輸出描述

輸出一行一個整數

樣例輸入

13 8

4 96 10 64 55 13 94 53 5 24 89 8 30

1 1 1 1 1 2 4 1

樣例輸出

455

數據范圍及提示

【數據范圍】

對于30%的數據有1 ≤ N≤ 30,1 ≤M≤ 12。

對于50%的數據有1 ≤ N≤ 120,1 ≤M≤ 50,且4 種爬行卡片,每種卡片的張數不會超

過20。

對于100%的數據有1 ≤ N≤ 350,1 ≤M≤ 120,且4 種爬行卡片,每種卡片的張數不會

超過40;0 ≤ ai ≤ 100,1 ≤ i ≤ N;1 ≤ bi ≤ 4,1 ≤ i ≤M。輸入數據保證N?1=ΣM

i b

1

分析

背包,我們枚舉當前使用了的四種牌的情況即可。

代碼

#include<stdio.h>#define max(x,y) (x>y?x:y)int b[45][45][45][45]={0};int main(){ int m,n,i,j,p,q,a[351]={0},x[5]={1,1,1,1,1}; scanf("%d %d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=0;i<m;i++) { scanf("%d",&j); x[j]++; } for(i=1;i<=x[1];i++) for(j=1;j<=x[2];j++) for(p=1;p<=x[3];p++) for(q=1;q<=x[4];q++) b[i][j][p][q]=max(max(b[i-1][j][p][q],b[i][j-1][p][q]),max(b[i][j][p-1][q],b[i][j][p][q-1]))+a[i+2*j+3*p+4*q-9];
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 方城县| 天峨县| 谢通门县| 临江市| 灵山县| 赤壁市| 五莲县| 裕民县| 温州市| 罗田县| 安宁市| 沾益县| 临朐县| 通州市| 晋州市| 雅江县| 永定县| 怀安县| 浏阳市| 秭归县| 黄石市| 汾西县| 大姚县| 阿鲁科尔沁旗| 贵溪市| 汶上县| 漳浦县| 靖安县| 黑龙江省| 常山县| 辽宁省| 南木林县| 海南省| 锡林郭勒盟| 尼勒克县| 左云县| 东乡族自治县| 子洲县| 临漳县| 玉环县| 日照市|