Q老师度假【动态规划dp】【矩阵快速幂优化】

2023-05-16

问题描述

忙碌了一个学期的 Q老师 决定奖励自己 N 天假期。假期中不同的穿衣方式会有不同的快乐值。
已知 Q老师 一共有 M 件衬衫,且如果昨天穿的是衬衫 A,今天穿的是衬衫 B,则 Q老师 今天可以获得 f[A][B] 快乐值。
在 N 天假期结束后,Q老师 最多可以获得多少快乐值?

Input

输入文件包含多组测试样例,每组测试样例格式描述如下:
第一行给出两个整数 N M,分别代表假期长度与 Q老师 的衬衫总数。(2 ≤ N ≤ 100000, 1 ≤ M ≤ 100)
接下来 M 行,每行给出 M 个整数,其中第 i 行的第 j 个整数,表示 f[i][j]。(1 ≤ f[i][j] ≤ 1000000)测试样例组数不会超过 10。

Output

每组测试样例输出一行,表示 Q老师 可以获得的最大快乐值。

Sample Input

3 2
0 1
1 0
4 3
1 2 3
1 2 3
1 2 3

Sample Output

2
9

问题分析

• 天数连续,很明显有子结构的性质,可以考虑 DP
设DP状态:
令 f[i][j] 表示第 i 天,穿的衣服为 j 所获得的快乐值总和
根据 DP 状态,不难得到如下的转移方程
• 枚举前一天穿的衣服为 k,即
•f[i][j] = max{ f[i-1][k] + H[k][j] } (1<=k<=M)
直接求解时间复杂度为O(N * M * M)会超时

需要用矩阵快速幂进行优化
矩阵快速幂转化方法
在这里插入图片描述
转换过程
•C[i][j] = ∑(A[i][k] ∗ B[k][j]) ⇒ max (A[i][k]+ B[k][j])
• 将累加换成了max,乘法换成了加法
这样是可行的,它依然满足结合律,严谨的数学证明在这里不再展示。

#include<stdio.h>
#include<string.h>
using namespace std;
int M;
long long max(const long long&x,const long long& y){
	if(x>y)return x;
	return y;
}
struct Matrix{
	long long x[110][110];
	Matrix operator*(const Matrix&t)const{
		Matrix ret;
		for(int i=0;i<M;i++)
			for(int j=0;j<M;j++){
				ret.x[i][j]=0;
				for(int k=0;k<M;k++)
					ret.x[i][j]=max(ret.x[i][j],x[i][k]+t.x[k][j]);
			}
		return ret;
	}
	Matrix(){memset(x,0,sizeof x);}
	Matrix(const Matrix&t){memcpy(x,t.x,sizeof x);}
};
Matrix quick_pow(Matrix a,int x){
	Matrix ret;
	memset(ret.x,0,sizeof ret.x);
	while(x){
		if(x&1)ret=ret*a;
		a=a*a;
		x>>=1;
	}
	return ret;
}
int main(){
	int N;
	while(scanf("%d%d",&N,&M)!=EOF){
		Matrix a;
		for(int i=0;i<M;i++)
			for(int j=0;j<M;j++)
				scanf("%lld",&a.x[j][i]);
		Matrix f=quick_pow(a,N-1);
		long long ans=0;
		for(int i=0;i<M;i++)
			for(int j=0;j<M;j++)
				ans=max(ans,f.x[i][j]);
		printf("%lld\n",ans); 
	}
	
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Q老师度假【动态规划dp】【矩阵快速幂优化】 的相关文章

随机推荐

  • 用轻量服务器搭建自己的pdf在线工具箱(支持pdf压缩以及pdf OCR)

    上篇文章中我们讲了怎么利用腾讯轻量云服务器搭建一个PDF在线压缩工具 xff0c 今天我们来搭建一个更强大的工具 xff0c 不仅支持PDF在线压缩 xff0c 还支持PDF OCR文字识别 前言 前两天需要压缩一个pdf文件 xff0c
  • 用轻量服务器搭建imgproxy来获取不同尺寸的图片

    现在很多站长都喜欢搭建一个自己的私有图床来管理图片 xff0c 使用的一般都是第三方的开源图床程序 有时候可能第三方的图床程序不能完全满足我们的需要 xff0c 比如说 xff0c 我们上传了一张图片以后 xff0c 在不同的页面下 xff
  • 在轻量服务器上使用NextList搭建OneDriver列表程序

    什么是列表程序 xff1f 我们平时都会使用各种各样的网盘程序来把我们的文件保存到互联网上 xff0c 然后在需要的时候再从网盘中下载文件 一般情况下 xff0c 浏览文件列表以及下载文件都必须先登录网盘账号 xff0c 如果我们想要把文件
  • 良心云最近活动是真多啊,一波接一波,大伙有需要的上车

    1 轻量云2核免费升配4核 直接去控制台选择248套餐升级就行 xff0c 有这个配置的可以去操作一下 xff0c 截止到这个月底 我已经升了 附上轻量控制台链接 xff1a https console cloud tencent com
  • beego打包在windows上闪退

    打包拿到其他windows机器上运行 xff0c 直接闪退无法正常运行 没办法 xff0c 在cmd下运行可执行文件 发现又以下报错 xff1a ORM 2020 09 11 14 29 12 register db Ping 96 def
  • Debian11.3配置SSH允许root用户远程登录系统

    系统版本 root 64 localhost cat etc os release PRETTY NAME 61 34 Debian GNU Linux 11 bullseye 34 NAME 61 34 Debian GNU Linux
  • Shell 脚本常用命令

    Shell 脚本的概念 将平时使用的各种Linux命令按顺序保存 xff08 堆叠 xff09 到一个文本文件中 xff0c 添加上执行权限 xff0c 就是一个Shell脚本 将要执行的命令按先后顺序保存到一个文本文件 给该文件可执行权限
  • 来,看看记事本里会变成乱码的字……不仅仅是“联通”而已……

    众所周知 xff0c 联通 这两个字直接默认保存到记事本里会出现乱码 xff0c 变成小黑块 具体原因网上解释很多 xff0c 总结起来就一句话 xff1a 联通 的内码是0xC1 1100 0001 0xAA 1010 1010 0xCD
  • Python读取Word表格数据

    import docx from docx import Document 导入库 path 61 34 E python data 1234 docx 34 文件路径 document 61 Document path 读入文件 tabl
  • Python:下载和安装Pygame

    1 下载Pygame包 注意 xff1a 根据Python版本和Windows系统的位数选择要对应版本的Pygame包 官网地址 xff1a http www pygame org download shtml 其中 xff0c 如果Pyt
  • python 编写input和output函数,输出学生信息

    题目 xff1a 编写input 和output 函数输入 xff0c 输出5个学生的数据记录 解释 xff1a 可以通过函数的方式实现 xff0c 也可以用类的方式实现 xff0c 下面举例用类的方法实现 xff1a span class
  • python 调整行和列

    在 Excel 中 xff0c 调整行和列的大小非常容易 xff0c 只要点击并拖动行的边缘 xff0c 或列的 头部 但如果你需要根据单元格的内容来设置行或列的大小 xff0c 或者希望设置大量电 子表格文件中的行列大小 xff0c 编写
  • Word 文件转换为 markdown

    本文主要介绍在Ubuntu系统下面如何将 word 文件转换为 markdown 文件 第一步 xff1a 安装 unoconv 和 pandoc su span class operator span class keyword styl
  • VS2013平台搭建——关于无法打开“kernel32.lib”和无法运行“rc.exe”的解决方法

    背景 xff1a 由于项目需要 xff0c 必须使用VS2013作为开发平台 由于以前一直使用的是VS2010 xff0c 平台搭建时傻瓜式下一步到底就完成了 xff0c 这次遇到了点小困难 xff0c 找了点资料解决了 留个记录 xff0
  • iOS autolayout自适应cell高度时使用estimatedRowHeight的一些问题

    estimatedRowHeight是一个预估高度 xff0c 再iOS11之前默认是0 xff0c 也就是默认关闭 xff0c 在iOS11下 xff0c 默认44 再iOS11下也可以让estimatedRowHeight 61 0来关
  • 解决关闭deepin 15.11“自动索引内置磁盘”后仍然卡顿的问题

    关闭文件管理器中 自动索引内置磁盘 后 xff0c 查看iotop xff0c 已经没有占用磁盘的程序 xff0c 然而系统仍然卡顿 由于使用过程中听到磁盘频繁休眠 启动 xff1b 并且系统使用中卡死 以及待机后启动并卡死 xff0c 强
  • 打牌(求牌型方案数)

    问题描述 有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围区间是 0 到 A 1 xff09 和一个花色 xff08 整数 xff0c 记为b xff0c 范围区间是 0 到 B 1 扑克牌是互异的 x
  • 滑动窗口【区间最大值区间&最小值】【单调队列】

    问题描述 ZJM 有一个长度为 n 的数列和一个大小为 k 的窗口 窗口可以在数列上来回移动 现在 ZJM 想知道在窗口从左往右滑的时候 xff0c 每次窗口内数的最大值和最小值分别是多少 例如 xff1a 数列是 1 3 1 3 5 3
  • Q老师的考验【矩阵快速幂】【斐波那契数列】

    问题描述 Q老师 对数列有一种非同一般的热爱 xff0c 尤其是优美的斐波那契数列 这一天 xff0c Q老师 为了增强大家对于斐波那契数列的理解 xff0c 决定在斐波那契的基础上创建一个新的数列 f x 来考一考大家 数列 f x 定义
  • Q老师度假【动态规划dp】【矩阵快速幂优化】

    问题描述 忙碌了一个学期的 Q老师 决定奖励自己 N 天假期 假期中不同的穿衣方式会有不同的快乐值 已知 Q老师 一共有 M 件衬衫 xff0c 且如果昨天穿的是衬衫 A xff0c 今天穿的是衬衫 B xff0c 则 Q老师 今天可以获得