首页 > 其他分享 >「Wdoi-(-1)」恋弹者们的黑集市

「Wdoi-(-1)」恋弹者们的黑集市

时间:2024-09-29 20:23:45浏览次数:3  
标签:骰子 const 数字 int Wdoi 恋弹者 集市 MAXN dp

「Wdoi-(-1)」恋弹者们的黑集市

魔理沙有两种方法移动这个骰子:将骰子向下一列翻转,或者向下一行翻转。值得注意的是,翻转骰子后,骰子每面上的数字就会随着翻滚而改变。现在魔理沙需要将骰子滚动至第 \(n\) 行第 \(m\) 列。

魔理沙的分数被定义为,所有时刻,骰子与棋盘上的数字接触的那一面的数字,乘上棋盘上该数字,再累加起来的和。只有魔理沙最大化这个和,她才能获取她所需要的卡片。

你能帮帮魔理沙吗?

简要题意

有一个 \(n\times m\) 大小的棋盘,第 \(i\) 行第 \(j\) 列写有数字 \(a_{i-1,j-1}\)。

现在有一个骰子,六个面按照前、后、左、右、上、下的顺序,依次写有数字 \(w_0,w_1,w_2,w_3,w_4,w_5\)。现在骰子摆放在 \((0,0)\) 位置,需要将它滚动至 \((n-1,m-1)\)。

骰子只有两种方式滚动:向下一行翻滚、向下一列翻滚。我们记一种方案的权值为,整个过程中(包括骰子在起点和终点时),骰子最底面上写着的数字,与此时骰子所在格子上写着的数字的乘积之和。

思路

\(dp\),我们很自然的会想到使用 \(dp_{i,j}\) 来表示骰子到达 \((i,j)\) 点的可以获得的最大权值,但是我们无法确定到达这一点时魔方的“方向”,这也就提示我们要把“魔方的状态”这个东西设计进转移方程式里面。

我们发现,我们只需要两个从正方体中心出发的两条垂直的有向射线就可以确定这个骰子的六个面了。

于是我们更改一下状态的设计,用 \(dp_{i,j,k,h}\) 表示骰子到了 \((i,j)\) 点,编号为 \(k\) 的面朝下,编号 \(h\) 的面朝前所能得到的最大权值。

我们知道 \(dp_{i,j}\) 会从 \(dp_{i - 1,j}\) 和 \(dp_{i,j - 1}\) 转移过来,也就是说骰子会从右边翻过来或者从上面翻下来。

图示:

点 \((i,j)\):

从 \((i - 1,j)\) 翻下来:

从 \((i,j - 1)\) 翻到右边:

其中图 \(2\) 的状态是 \(dp_{i - 1,j,f(h),k}\),而图三的状态可以表示为 \(dp_{i.j - 1,g(h,k),h}\) 。

其中 \(f(h)\) 表示 \(h\) 面的对面,而 \(g(h,k)\) 表示以 \(h\) 面作为前面,\(k\) 面作为右边,这个状态立方体的下面。

而 \(f(h)\),\(g(h,k)\) 都可以提前预处理出来。

所以可以得到状态转移式:

\[dp_{i,j,k,h} = \max(dp_{i,j,k,h} , \max(dp_{i - 1,j,f(h),k},dp_{i,j - 1,g(h,k),h}) + w_k \times val_{i,j}) \]

此题完结,注意初始状态是第一张图的状态。

\(code\)

#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1e3 + 7;
const long long INF = -2e9;
const int rd[6] = {1,0,3,2,5,4};
const int cd[6][6] = {
	{-1 ,-1 ,4 ,5 ,3 ,2},
	{-1 ,-1 ,5 ,4 ,2 ,3},
	{5 ,4 ,-1 ,-1 ,0 ,1},
	{4 ,5 ,-1 ,-1 ,1 ,0},
	{2 ,3 ,1 ,0 ,-1 ,-1},
	{3 ,2 ,0 ,1 ,-1 ,-1},
};
int n,m;
int val[MAXN][MAXN];
int dp[MAXN][MAXN][6][6];
int w[MAXN];
int f(int x){ return rd[x]; }
int g(int h,int k){ return cd[h][k]; }
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m;
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++){
			cin>>val[i][j];
		}
	}
	for(int i = 0;i <= 5;i++){
		cin>>w[i];
	}
	for(int i = 0;i <= n;i++){
		for(int j = 0;j <= m;j++){
			for(int k = 0;k <= 5;k++){
				for(int h = 0;h <= 5;h++){
					dp[i][j][k][h] = INF;
				}
			}
		}
	}
	dp[1][1][5][0] = w[5] * val[1][1];
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++){
			if(i == j && i == 1) continue;
			for(int k = 0;k <= 5;k++){
				for(int h = 0;h <= 5;h++){
					if(g(h,k) == -1) continue;
					dp[i][j][k][h] = max(dp[i][j][k][h] , max(dp[i - 1][j][f(h)][k],dp[i][j - 1][g(h,k)][h]) + w[k] * val[i][j]);
				}
			}
		}
	}
	int ans = INF;
	for(int i = 0;i <= 5;i++){
		for(int j = 0;j <= 5;j++){
			ans = max(ans,dp[n][m][i][j]);
		}
	}
	cout<<ans;
	return 0;
}

标签:骰子,const,数字,int,Wdoi,恋弹者,集市,MAXN,dp
From: https://www.cnblogs.com/wyl123ly/p/18440687

相关文章

  • 从数据集市到数据驱动的星舰:透视数据中台之晚景与数据飞轮的兴起
    在这个数据作为企业最核心资产的时代,数据中台一度成为了企业数字化转型的灵魂工具。然而风华正茂并不代表永恒,在众多企业摒弃传统仓库模型,积极构建数据中台的同时,一个新的概念强势入场——数据飞轮。今天,让我们一起探讨数据中台是否过时了,以及为什么数据飞轮逐渐成为新宠。数据中台......
  • 技术名称通解 --- 数据集市
    数据集市对数据维度的细化,就是是数据仓库的一个子集。用于加速数据分析而无需浪费时间来搜索整个数据仓库。数据集市可在部门层级为重要的业务决策提供指导。例如,营销团队可使用数据集市分析消费者行为,而销售人员可使用数据集市编制季度销售报告。由于这些任务都发生在各自的部......
  • P8348 「Wdoi-6」未知之花魅知之旅
    题意设一个好的序列由\(a_0\)与\(a_1\)生成而来。满足,对于\(1<i<n\),\(a_{i-1},a_i,a_{i+1}\)中最大一个数等于其他两个之和,以及所以元素都不小于\(k\)。有\(T\)次询问,每次给定\((a_0,a_1,x,y,k)\)满足限制,且有序列\(a\)中有两项相邻依次为\(x,y\)......
  • P8346 「Wdoi-6」最澄澈的空与海
    题意给定一个\(2n\)个点,\(m\)条边的二分图,判断完美匹配数量是否为\(1\)。\(n\le10^6\)Sol考虑加点的过程,对于一个唯一完美匹配的二分图,新增一对节点,考虑使得当前匹配并不唯一的情况。注意到新增的点有一个度数为\(1\),则新二分图完美匹配依旧唯一,因此可以发现唯一完......
  • 数据仓库 vs 数据集市
    数据仓库(DataWarehouse)和数据集市(DataMart)一、基本概念1.数据仓库数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。数据仓库围绕特定的主题组织数据,例如销售、客户、产品等,而不是像操作型数据库那样按照业务流程组织。例如,......
  • P8347 「Wdoi-6」另一侧的月 题解
    P8347「Wdoi-6」另一侧的月题解第一次自己思考出来紫题,题解纪念一下。下面为大家讲解如何一步步推到最终结论:首先,原树没有根,不妨设它的根为\(1\),将它转化成有根的,便于操作。为了方便描述,我们称将一个非根节点的点的父亲删去,保留含这个点的连通块这个操作为截取操作(就是......
  • P8540 「Wdoi-2」夜空中的 UFO 恋曲 题解
    hanghangakioi考试的时候在乱猜结论,交了几遍就过了,证明当然是赛后才想的()文中加粗部分是需要读者稍微思考一下原因的地方(不是重点)。先考虑一下样例二,将\(10^{18}\)化成二进制:\(1101...001000000000000000000\)。其实只需要知道末尾有\(18\)个\(0\)就行了,因为在\(x\)......
  • 轻松选型,高效开发——业务开发集市助您一臂之力
    在当今这个日新月异的时代,高效开发已成为企业保持竞争力的关键。为了满足市场对高效、灵活开发工具的迫切需求,OceanMind海睿思推出业务开发集市。这款开发工具汇集了众多丰富的、高度可定制的控件和组件,以及灵活的模板选型功能,旨在帮助企业快速响应并满足多变的客户需求。通过......
  • 斯卡帕罗集市究竟是什么含义
    首先,背景,斯卡帕罗集市今天依旧存在,只不过现在它已经没有了买卖的功能。17世纪早期,因为高额的税收和不断的竞争,导致斯卡布罗面临着崩溃,虽然后来集市一度有复苏的迹象,但还是在1788年终结了。虽然传统的集市已经不在,但每年九月(集市举办的日期)当地人还是会举办庆祝活动,以纪念当年的繁......
  • python爬取校园集市帖子并生成词云图
    注:本篇需要python基础,json基础前言:上篇我们学习了怎么用python获取百度热搜,在这篇中,我们将进一步学习,利用python爬取校园集市帖子并生成词云图目录第一步,分析请求第二步,编写代码第三步,批量获取帖子第四步,绘制词云图灵感背景:经常在群里看见机器人转发的校园集市帖子,于是想要爬......