P1541 [NOIP2010 提高组] 乌龟棋(dp)dp5

2023-10-31

//https://www.luogu.com.cn/problem/P1541
#include<bits/stdc++.h>
#include<unordered_map>
#include<array>
#define ll long long
#define ull unsigned long long
#define all(a) a.begin(),a.end()
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;

const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-8;
const ll mod = 1e9 + 7;
const int N = 1e5 + 5;

int n, m, num[5], dp[5][41][41][41][41], a[N];//dp一维表示位置, 因为太大开不下, 则开滚动数组来记录,因为只会从前面四个进行转移 

void solve()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1, x; i <= m; i++)
		cin >> x, num[x]++;//存储每张牌的数量

	int ans = 0;
	for (int now = 2; now <= n; now++)//枚举当前位置, 当前位置可从少一张牌的情况转移过来
	{
		for (int i = 0; i <= num[1]; i++)
		{
			for (int j = 0; j <= num[2]; j++)
			{
				for (int k = 0; k <= num[3]; k++)
				{
					for (int l = 0; l <= num[4]; l++)
					{
						if (i + 2 * j + 3 * k + 4 * l == now - 1)
						{
							if (now >= 2 && i)
								dp[(now - 1) % 5][i][j][k][l] = max(dp[(now - 1) % 5][i][j][k][l], dp[(now - 2) % 5][i - 1][j][k][l] + a[now]);
							if(now >= 3 && j)
								dp[(now - 1) % 5][i][j][k][l] = max(dp[(now - 1) % 5][i][j][k][l], dp[(now - 3) % 5][i][j - 1][k][l] + a[now]);
							if(now >= 4 && k)
								dp[(now - 1) % 5][i][j][k][l] = max(dp[(now - 1) % 5][i][j][k][l], dp[(now - 4) % 5][i][j][k - 1][l] + a[now]);
							if(now >= 5 && l)
								dp[(now - 1) % 5][i][j][k][l] = max(dp[(now - 1) % 5][i][j][k][l], dp[(now - 5) % 5][i][j][k][l - 1] + a[now]);
							ans = max(ans, dp[(now - 1) % 5][i][j][k][l]);
						}
					}
				}
			}
		}
	}
	cout << ans + a[1] << '\n';
}

signed main()
{
	IOS;
	int t = 1;
	//cin >> t;
	while (t--)
		solve();
	return 0;
}

#include<bits/stdc++.h>
#include<unordered_map>
#include<array>
#define ll long long
#define ull unsigned long long
#define all(a) a.begin(),a.end()
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;

const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-8;
const ll mod = 1e9 + 7;
const int N = 1e5 + 5;

int n, m, num[5], dp[41][41][41][41], a[N];

void solve()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1, x; i <= m; i++)
		cin >> x, num[x]++;//存储每张牌的数量

	int ans = 0;
	for (int i = 0; i <= num[1]; i++)//每组i, j, k, l对于唯一的now, 所以无需枚举now, 转移只是根据牌数而非位置(b 位置要从 a 位置转移过来, 只会选择一种牌少一张的转移方式)
	{
		for (int j = 0; j <= num[2]; j++)
		{
			for (int k = 0; k <= num[3]; k++)
			{
				for (int l = 0; l <= num[4]; l++)
				{
					int now = 1 + i + 2 * j + 3 * k + 4 * l;
					if (now > n)
						continue;
					if (i)
						dp[i][j][k][l] = max(dp[i][j][k][l], dp[i - 1][j][k][l] + a[now]);
					if (j)
						dp[i][j][k][l] = max(dp[i][j][k][l], dp[i][j - 1][k][l] + a[now]);
					if (k)
						dp[i][j][k][l] = max(dp[i][j][k][l], dp[i][j][k - 1][l] + a[now]);
					if (l)
						dp[i][j][k][l] = max(dp[i][j][k][l], dp[i][j][k][l - 1] + a[now]);
					ans = max(ans, dp[i][j][k][l]);
				}
			}
		}
	}
	cout << ans + a[1] << '\n';
}

signed main()
{
	IOS;
	int t = 1;
	//cin >> t;
	while (t--)
		solve();
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P1541 [NOIP2010 提高组] 乌龟棋(dp)dp5 的相关文章

随机推荐

  • Vue中动态加载css、js、字体

    1 首先封装三个公用方法 动态加载css loadStyle url var link document createElement link link type text css link rel stylesheet link href
  • 微服务模式下API测试

    来自茹炳晟 session和cookie的区别 如果后端工程师使用 session 记录使用者登入信息 那么后端通常会传一个 session ID 给前端 之后 前端在发给后端的 requests 的 header 中就需要设置此 sess
  • 浅析MOS管如何快速关断背后的秘密

    MOS管的快速关断原理 R4是Q1的导通电阻没有Q1就没有安装的必要了 当低电位来时Q1为泻放扩流管 功率MOS管怎样关断 能否用PWM实现 怎样实现 功率mosfet的三个端口 G极 D极 S极 G极控制mosfet的开通 关断 给GS极
  • linux下redis目录结构_Linux结构目录详解

    在Linux中 系统默认的用户是root 其实和 windows 的 administrator 类似 root 用户可以操作操作系统的任何文件和设备 OMG 记住了 是大哥大 干啥都行 所以在生产环境就不要乱用root了 权利越大 责任越
  • deepin开启ssh远程登录

    1 安装登录服务端 sudo apt get install openssh server 2 配置端口 sudo vi etc ssh sshd config port 22 处即为修改端口的地方 默认不修改就是22端口 3 重启SSH服
  • 数据提取之jsonpath模块

    目录 一 Jsonpath简介 1 jsonpath的介绍 2 jsonpath模块的使用场景 二 Jsonpath的使用 1 jsonpath安装 2 jsonpath模块提取数据的方法 3 jsonpath语法 一 Jsonpath简介
  • vue中使用wow.js+animate.css实现页面滚动加载元素动画

    1 npm 安装 wow js 安装后 animate css 会自动安装 npm install wowjs save dev 或者使用yarn安装 yarn add wow js 2 在main js中引入animate css imp
  • 三秒绘画!我的AI绘画之旅——Adobe体验

    首发于微信公众号 AI执剑人 微信号 AISwordholder 欢迎大家订阅关注 你敢相信下面这幅图只用了三秒就画出来了吗 画画如此简单 这都是源于AIGC的快速发展 所谓AIGC 就是使用人工智能来生成内容 是现在人工智能中最为火热的领
  • Kafka日志结构(详解)大数据开发

    Kafka作为大数据技术生态的重要组件 尤其是实时流数据处理场景下 作为分布式生产 消费系统 得到广泛的重用 而Kafka在数据生产和消费上 日志是主要的场景 今天的大数据开发学习分享 我们就来讲讲kafka日志结构的基础 Kafka消息是
  • lib库知识全面讲解(.lib、.dll)

    一 静态链接lib库和lib导入库以及动态链接库dll的关系 lib静态库 和 导入lib库 这些词汇相信我们经常听说了吧 但是lib怎么来的 怎么使用的我们很多人还真不知道哦 我也是专门研究学习才发现的 所以在此详细讲述下 分享给大家 想
  • 华为OD机试 - 喊7的次数重排(Java)

    题目描述 喊7是一个传统的聚会游戏 N个人围成一圈 按顺时针从1到N编号 编号为1的人从1开始喊数 下一个人喊的数字为上一个人的数字加1 但是当将要喊出来的数字是7的倍数或者数字本身含有7的话 不能把这个数字直接喊出来 而是要喊 过 假定玩
  • 龙芯 buildroot 使用详解

    龙芯 buildroot 使用详解 一般文件系统都要包含很多第三方软件 如 busybox tftp apache PHP DNS qt等等 为了避免繁琐的移植工作 buildroot应运而生 通过menuconfig来配置我们需要的功能
  • 基于Golang的gRPC框架使用与开发

    一 gRPC 基础 包括 rpc gRPC Protobuf 等概念 网上已经有详细的介绍 此处不再过多说明 关于 gRPC 的介绍 可以参考官方介绍文档 以及微软官方文档介绍 通俗的来说 gRPC 是一种 rpc 的具体实现 其利用 Pr
  • 五、STL容器:STL算法总结

    5 STL算法 5 1 构成 头文件 功能
  • 从被吐槽的Amazon看,如何建设好的on call机制?

    对于每个程序员来说 进入市值万亿的Amazon工作 似乎都是一件值得骄傲的事 但只要在网络上一提起Amazon 关于它的on call 机制的吐槽就会此起彼伏 要知道在互联网公司 on call应该是非常普遍的现象 但大家为什么对Amazo
  • 职工管理系统(超详细版c++)

    一 项目概述 编写一个有添加 删除 修改 显示 排序 查找功能的职工管理系统 对一些职工的信息进行处理 保存到文本文件中 便于后续使用 二 创建项目 在本篇文章中我们使用vs2022版本编写程序 为了使我们的代码结构严谨 减少冗余 便于修改
  • 我从未结束的Java之旅(二)

    目录 大胆北漂 餐饮 团队扩张 扩张的烦恼 团队管理的探索 大胆北漂 餐饮 团队扩张 由于公司业务的扩展以及战略方向的变更 之前负责得小团队不得不扩招 由5个人得团队补充到了20人 当时我们saas服务已经很庞大了 基本涉及到餐饮相关的所有
  • Go语言之JSON解码函数Unmarshal

    直接上代码 package main import encoding json fmt 定义Actress结构体 type Actress struct Name string Birthday string BirthPlace stri
  • springboot 之 JPA

    一 说明 JPA提供了操作数据库的接口 在开发过程中继承和使用这些接口 可简化现有的持久化开发的工作 二 JPA提供的接口 1 JpaRepository JpaRepository继承自PagingAndSortingRepository
  • P1541 [NOIP2010 提高组] 乌龟棋(dp)dp5

    https www luogu com cn problem P1541 include