【Week 14 作业E】Q老师度假

2023-05-16

题目描述

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

输入格式

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

输出格式

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

输入样例

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

输出样例

2
9

思路

天数连续,仍可以考虑动态规划。
令f[i][j]为第i天穿j衣服时获得的最大快乐值。
可得状态转移方程f[i][j]=max(f[i-1][k]+H[K][j])其中0<k<=M,很明显时间复杂度为O(NMK)=O(1e9)会TLE。
因此应对时间复杂度进行优化,可看出状态转移方程与矩阵运算很相似,只是把累加变成求max,乘变为加,
在这里插入图片描述
因此可考虑使用矩阵乘法的变式来求dp,而矩阵幂次可使用快速幂的方式进行优化。

代码

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

【Week 14 作业E】Q老师度假 的相关文章

随机推荐

  • Ubuntu20.04安装anaconda3成功以后,找不到conda命令

    原因 xff1a 环境设置没有更新 解决办法 xff1a 注意路径 xff01 找到anaconda安装完成后生成的文件夹位置 相应修改 xff0c 如下图我的位置就在主目录下 xff1a 因此 xff0c 我执行的命令为 xff1a ec
  • ubuntu16.04 opencv打开摄像头失败

    ubuntu16 04 opencv打开摄像头失败 按照opencv检测AruCo标记教程 xff0c 运行程序时打开摄像头失败 xff0c 使用的相机是Intel RealSense D435 发生问题的代码如下 span class t
  • 计算机视觉学习笔记&思维导图(一起轻松学习计算机视觉与图像处理)

    文章目录 前言一 思维导图二 笔记勘误 前言 本文为计算机视觉课程期末复习的笔记 xff0c 编者耗时近半个月整理而成 内容依据课程的学习资料以及查阅网上一些资料梳理得到的 xff0c 编者希望在应付考试的同时能够将计算机视觉的知识体系建立
  • python发送邮件

    text 61 39 亲爱的Jerry 我是你的邻居Tom xff01 5 1邀请你来参加劳动 xff01 CALL ME xff1a 123 64 qq com 39 from email mime text import MIMETex
  • Python实现微信自动化发送信息

    需求 xff1a 利用PC端微信实现自动向文件传输助手 xff0c 好友等发送信息 库说明 psutil 获取系统运行的进程和系统利用率 xff08 包括CPU 内存 磁盘 网络等 xff09 信息 xff0c 用于获取进程ID pywin
  • 数据类型——枚举

    文章目录 枚举是什么枚举的声明枚举与其他数据类型的转换与int类型转换枚举转intint转枚举 与string类型转换枚举转字符串字符串转枚举 枚举的意义是什么 枚举是什么 在c 中 xff0c 枚举 enumeration 是一种数据类型
  • C# 调用WebService的方式汇总

    C 调用WebService的方式汇总 方式一 xff1a 根据提供的webservice地址 xff0c 用VS自带工具生成cs文件 xff0c 添加到项目中使用即可 方式二 xff1a 根据webservice地址 xff0c 动态在项
  • npm 报错:`[HPM] Error occurred while trying to proxy request (ECONNREFUSED)`

    npm 报错 xff1a HPM Error occurred while trying to proxy request users from localhost 8000 to https localhost 5000 ECONNREF
  • selenium Grid 4.x版本 部署操作 笔记

    selenium Grid 4 x版本 部署操作 笔记 selenium Grid 是 selenium套件 的一部分 xff0c 实现分布式测试 xff0c 多用于浏览器兼容性测试 使用 hub nodes 理念 xff1a 一台 hub
  • 图解辗转相除法

    前言 虽然在很久很久以前刚入门ACM的时候就已经知道辗转相除法的存在 xff0c 并且也用GCD解了不少题 xff0c 不过说实话辗转相除法的原理一直不是很清楚 直到最近做到这样一道题 Codeforces 343A xff0c 本以为是一
  • 【程序设计思维与实践 Week2 实验C】瑞神打牌

    题意 xff1a 牌局由四个人构成 xff0c 围成一圈 我们称四个方向为北 东 南 西 对应的英文是North xff0c East xff0c South xff0c West 游戏一共由一副扑克 xff0c 也就是52张构成 开始 x
  • 【程序设计思维与实践 Week5 作业D】滑动窗口

    题目描述 xff1a 有一个长度为 n 的数列和一个大小为 k 的窗口 窗口可以在数列上来回移动 现在 我们想知道在窗口从左往右滑的时候 xff0c 每次窗口内数的最大值和最小值分别是多少 例如 xff1a 数列是 1 3 1 3 5 3
  • 【Week8 CSP-M2 C】咕咕东的奇妙序列

    题目描述 格式说明 样例输入 样例输出 数据规模 思路 由题知 xff0c 这个无限序列的第i部分是从1 i的子序列 xff0c 该解法的大体思路是我们首先确定要查询的项 设为k项 在无限序列的第几部分 第几个子序列 xff0c 然后再从这
  • 【Week 8 作业A】区间选点II

    题目描述 给定一个数轴上的 n 个区间 xff0c 要求在数轴上选取最少的点使得第 i 个区间 ai bi 里至少有 ci 个点 输入格式 输入第一行一个整数 n 表示区间的个数 xff0c 接下来的 n 行 xff0c 每一行两个用空格隔
  • 【Week 8 作业 B】猫猫向前冲

    题目描述 众所周知 xff0c TT 是一位重度爱猫人士 xff0c 他有一只神奇的魔法猫 有一天 xff0c TT 在 B 站上观看猫猫的比赛 一共有 N 只猫猫 xff0c 编号依次为1 xff0c 2 xff0c 3 xff0c xf
  • 【Week 9 作业 A】咕咕东的目录管理器

    题目描述 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响 xff0c 时不时发生故障 xff0c 他受不了了 xff0c 想要写一个高效易用零bug的操作系统 这工程量太大了 xff0c 所以他定了一个小目标 xff0c 从实现一个目
  • 【Week 11 作业】必做题

    Week 11 必做题 A 必做题 1题目描述输入格式输出格式输入样例输出样例思路代码 B 必做题 2题目描述输入格式输出格式数据范围样例输入样例输出思路代码 C 必做题 3题目描述输入格式输出格式样例输入样例输出思路代码 D 必做题 4题
  • 【Week 12 作业】必做题

    Week12必做题 必做题1题目描述输入格式输出格式输入样例输出样例代码 必做题2题目描述输入格式输出格式输入样例输出样例思路注意代码 必做题3题目描述输入格式输出格式输入样例输出样例思路代码 必做题1 题目描述 给出n个数 xff0c z
  • 【Week 13 作业E】TT的神秘任务3

    题目描述 TT 猫咖的生意越来越红火 xff0c 人越来越多 xff0c 也越来越拥挤 为了解决这个问题 xff0c TT 决定扩大营业规模 xff0c 但猫从哪里来呢 xff1f TT 第一时间想到了神秘人 xff0c 想要再次通过完成任
  • 【Week 14 作业E】Q老师度假

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