原题

题目描述 Description

小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。

…… 1 2 3 4 5 ……N 乌龟棋中M张爬行卡片,分成4种不同的类型(M张卡片中不一定包含所有4种类型 的卡片,见样例),每种类型的卡片上分别标有1、2、3、4四个数字之一,表示使用这种卡 片后,乌龟棋子将向前爬行相应的格子数。游戏中,玩家每次需要从所有的爬行卡片中选择 一张之前没有使用过的爬行卡片,控制乌龟棋子前进相应的格子数,每张卡片只能使用一次。 游戏中,乌龟棋子自动获得起点格子的分数,并且在后续的爬行中每到达一个格子,就得到 该格子相应的分数。玩家最终游戏得分就是乌龟棋子从起点到终点过程中到过的所有格子的 分数总和。 很明显,用不同的爬行卡片使用顺序会使得最终游戏的得分不同,小明想要找到一种卡 片使用顺序使得最终游戏得分最多。 现在,告诉你棋盘上每个格子的分数和所有的爬行卡片,你能告诉小明,他最多能得到 多少分吗?

输入描述 Input Description

输入的每行中两个数之间用一个空格隔开。

第1行2个正整数N和M,分别表示棋盘格子数和爬行卡片数。

第2行N个非负整数,a1a2……aN,其中ai表示棋盘第i个格子上的分数。

第3行M个整数,b1b2……bM,表示M张爬行卡片上的数字。 输入数据保证到达终点时刚好用光M张爬行卡片,即N - 1=∑(1->M) bi。

输出描述 Output Description

输出一行一个整数

样例输入 Sample Input

13 8

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

1 1 1 1 1 2 4 1

样例输出 Sample Output

455

数据范围及提示 Data Size & Hint

对于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=∑(1->M) bi

题意

求将m张卡片按一定顺序排列后所能走出的最大分数。

题解

又是DP。。。

由于只有4种卡片,我们就要先定一个数组c储存每种卡片的个数,再用一个4维数组f储存最大值。Fi,j,k,l表示用i张卡片1,j张卡片2,k张卡片3,l张卡片4所能走出的最大分数总和,i,j,k,l的最小值都为0(即在起点的时候),最大值分别为c[1],c[2],c[3],c[4]。

于是代码:

 1 uses math;
 2 var a:array[0..350] of longint;
 3 var c:array[1..4] of integer;//储存卡片数
 4 var n,m,i,j,k,l,x,b:longint;
 5 var f:array[-1..40,-1..40,-1..40,-1..40] of longint;//注意数组下界
 6 begin
 7   readln(n,m);
 8   for i:=1 to n do read(a[i]);
 9   for i:=1 to m do
10   begin
11     read(b);
12     inc(c[b]);
13   end;
14   for i:=0 to c[1] do
15   for j:=0 to c[2] do
16   for k:=0 to c[3] do
17   for l:=0 to c[4] do
18   begin
19     x:=i+j*2+k*3+l*4+1;//想想为什么要+1
20     f[i,j,k,l]:=max(max(max(f[i-1,j,k,l],f[i,j-1,k,l]),f[i,j,k-1,l]),f[i,j,k,l-1]);//求(取1前,取2前,取3前,取4前)4种情况的最大值
21     f[i,j,k,l]:=f[i,j,k,l]+a[x];//加上本身
22   end;
23   writeln(f[c[1],c[2],c[3],c[4]]);//输出全部卡片用完的最优解
24 end.
25
26 CodeVS 1068-乌龟棋

CodeVS 1068-乌龟棋

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/HAdolf-HQY/p/6336773.html

CodeVS 1068-乌龟棋相关推荐

  1. CODE[VS] 1068 乌龟棋

    题目链接: CODE[VS]1068 乌龟棋 题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格 ...

  2. P1541 乌龟棋 题解(洛谷,动态规划递推)

    题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...

  3. 【每日DP】day6 P1541 乌龟棋(四维DP)难度⭐⭐⭐

    P1541 乌龟棋 四维DP--四种状态,所以四维DP f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]:表示牌号分别为1,2,3,4,的时候用了i,j,k,l张牌 思路 ...

  4. 【NOIP2010】【P1317】乌龟棋

    似乎很像搜索的DP(应该也可以用搜索写) 原题: 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N 格是终点 ...

  5. AcWing 312. 乌龟棋

    小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘只有一行,该行有 N 个格子,每个格子上一个分数(非负整数). 棋盘第 1 格是唯一的起点,第 N 格是终点,游戏要求玩家控制一个乌龟棋子 ...

  6. 牛客网 【每日一题】7月27日题目精讲—乌龟棋

    来源:牛客网: 乌龟棋 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 文章目录 乌龟棋 题目描述 ...

  7. CJOJ 1087 【NOIP2010】乌龟棋 / Luogu 1541 乌龟棋(动态规划)

    CJOJ 1087 [NOIP2010]乌龟棋 / Luogu 1541 乌龟棋(动态规划) Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个 ...

  8. 【codevs1068】乌龟棋noip10年TG----第二个A掉的钻石题

    题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制 ...

  9. noip2010乌龟棋解题报告

    乌龟棋解题报告 题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一 的起点,第N格是终点, ...

最新文章

  1. The Third Revolution in Sequencing Technology
  2. Fragment回调Activity的事件分发
  3. 云原生乘风者联合征文活动——说出你和「阿里云云原生」的故事
  4. ffbe攻略站_最终幻想勇气启示录ffbe兵员强化攻略
  5. Java方法中的参数太多,第6部分:方法返回
  6. java web容器原理_javaWeb工作原理
  7. c语言跳至表域跳几个字符,c语言学习最好资料.doc
  8. php mvc登陆注册,Asp.Net MVC 5使用Identity之简单的注册和登陆
  9. projecteuler_problem11
  10. 电脑装oracle服务很卡,oracle11g安装后电脑启动很慢怎么解决
  11. 【协同任务】基于matlab蚁群算法多组群UAV协同任务路径规划【含Matlab源码 1578期】
  12. Inflated 3D ConvNet 【I3D】
  13. 企查查的批量公司查找
  14. 深度分析AI新职位丨人工智能训练师是什么?做什么的?发展前景如何?
  15. python3数据处理(一)-- 解析XML,Excle文件
  16. send()函数recv()函数详解
  17. 网站诊断报告之基本分析
  18. 字节跳动Web Infra发起 Modern.js 开源项目,打造现代 Web 工程体系
  19. 策略模式、模板模式实战
  20. 区块链应用 | 泡沫之下的区块链

热门文章

  1. c和java内存泄漏区别_内存溢出和内存泄漏的区别(转)
  2. apk提取加密素材_从apk包中提取unity资源
  3. python查看电脑配置_怎么查看电脑配置(教你如何查看电脑配置信息和型号)
  4. java编译器代码检查_Java编译器可以优化此代码吗?
  5. 友元是c还是java_[C++]【类】友元的三种声明及注意事项
  6. 24v开关电源维修技巧_焊机维修案例汇总6
  7. HTML+CSS+JS实现 ❤️520爱心背景表白网页动画特效❤️
  8. 二叉树为空意味着二叉树_不怕面试被问了!二叉树算法大盘点
  9. c语言项开发班级登入系统,c语言--班级管理系统
  10. 按网络中计算机所处的,按照网络中计算机所处的地位划分,计算机网络包括