题目:P1541 乌龟棋

感谢大神的题解(他的写的特别好)

写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...)

代码:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. ll num[+];
  5. ll p[];
  6. ll f[][][][];
  7. int main()
  8. {
  9. ios::sync_with_stdio(false);
  10. ll n,m;//n格子数,m牌数
  11. cin>>n>>m;
  12. for(ll i=;i<=n;i++)
  13. cin>>num[i];
  14. ll x;
  15. for(ll i=;i<=m;i++)
  16. cin>>x,p[x]++;//偷懒用逗号隔开
  17.  
  18. f[][][][]=num[];
  19. for(ll a=;a<=p[];a++)
  20. for(ll b=;b<=p[];b++)
  21. for(ll c=;c<=p[];c++)
  22. for(ll d=;d<=p[];d++)
  23. {
  24. ll r=+*a+*b+*c+*d;
  25. if(a>=) f[a][b][c][d]=max(f[a][b][c][d],f[a-][b][c][d]+num[r]);//如果有牌出
  26. if(b>=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b-][c][d]+num[r]);
  27. if(c>=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-][d]+num[r]);
  28. if(d>=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-]+num[r]);
  29. }
  30. cout<<f[p[]][p[]][p[]][p[]]<<endl;
  31. }

点击加号展开代码

思路:

每个牌有四种,建立一个四维数组f[a][b][c][d]表示当现在使用了a张走一位牌,b...,c...,d张走四位牌后能获得的最大数字

然后输入数据的时候准备一个数组p[5],把a,b,c,d牌数量分别放入1,2,3,4位

然后

  1. for(a=~p[])
  2.    for(b=~p[])
  3.     for(b=~p[])
  4.       for(b=~p[])//表示遍历a,b,c,d全部情况,我们要的是答案f[p[1]][p[2]][p[3]][p[4]]

所以要想办法递推到f[p[1]][p[2]][p[3]][p[4]]

用4个max,计算每一次的最大f[a][b][c][d],

那个递推式中:

  1. ll r=+*a+*b+*c+*d;//r表示当前的位置,+1是,比如说a=b=c=d=0,但是他是在第一位,所以初始位是1
  2. if(a>=) f[a][b][c][d]=max(f[a][b][c][d],f[a-][b][c][d]+num[r]);//如果有牌出
  3. if(b>=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b-][c][d]+num[r]);
  4. if(c>=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-][d]+num[r]);
  5. if(d>=) f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-]+num[r]);

中,a>=1是判断是否可以出牌

对于f[a-1][b][c][d]+num[r]的意思就是如果更新出了a牌之后的的数字总数,f[a][b][c][d]就是不出牌的数字总数,其实就是不变

P1541 乌龟棋 题解(洛谷,动态规划递推)的更多相关文章

  1. NOIP2000方格取数(洛谷,动态规划递推)

    先上题目: P1004 方格取数 下面上ac代码: ///如果先走第一个再走第二个不可控因素太多 #include<bits/stdc++.h> #define ll long long ...

  2. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)

    先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...

  3. P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)

    题目链接:P1060 开心的金明 基本思路: 基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是 f[j]=max(f[j],f[j-v[i]]+p[i]); 那么这里 ...

  4. P1048 采药(洛谷,动态规划递推,01背包原题)

    题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...

  5. P1091 合唱队形题解(洛谷,动态规划LIS,单调队列)

    先上题目 P1091 合唱队形(点击打开题目) 题目解读: 1.由T1​<...<Ti​和Ti​>Ti+1​>…>TK​可以看出这题涉及最长上升子序列和最长下降子序列 2 ...

  6. 洛谷 p1541乌龟棋

    洛谷 p1541乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行NN个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第NN格是终点,游戏 ...

  7. 【洛谷】P1541 乌龟棋(四维背包dp)

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

  8. 洛谷P1541 乌龟棋 [2010NOIP提高组]

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

  9. codevs1068 乌龟棋==洛谷P1541 乌龟棋

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

随机推荐

  1. from import 引入 变量 函数

  2. 展开阅读全文 js 爬虫操作

    from selenium import webdriver import time import random from bs4 import * browser = webdriver.Chrom ...

  3. Codeforces Round #100 A. New Year Table

    A. New Year Table time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  4. YTU 2504: 蚂蚁感冒

    2504: 蚂蚁感冒 时间限制: 1 Sec  内存限制: 128 MB 提交: 273  解决: 118 题目描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右.每只蚂蚁都只能沿 ...

  5. YTU 2633: P3 数钱是件愉快的事

    2633: P3 数钱是件愉快的事 时间限制: 1 Sec  内存限制: 128 MB 提交: 387  解决: 215 题目描述 超市收银员的钱盒里,各种钞票总是按照面额分类整理,这样做可以提高效率 ...

  6. mysqldump 导出数据表,和数据

    目录 导出数据库表与数据 导出数据表数据 导出多个表数据 只导出数据 只导出创建表的数据 导出数据库表与数据 mysqldump -uroot -p caomall>tmp.sql 导出数据表数 ...

  7. 一位ACMer过来人的心得(转)

    刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解.很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是必要条件. 我觉 ...

  8. python datatime日期和时间值模块

    datetime.time():是一个时间类,这个类接受4个参数,分别代表时,分,秒,毫秒.参数的默认值是为0 #!/usr/bin/env python #coding:utf8 import da ...

  9. softmax function in c++

    #include <iostream> #include <vector> #include <cmath> #include <algorithm> ...

  10. jQuery中contains和has的区别

    jQuery中contains和has的区别 根据不同的内容和属性可以准确定位到需要找的属性 如何根据内容筛选标签?:contains        匹配包含给定的文本元素$("div:co ...