江苏徐州邀请赛 I题 类矩阵快速幂

题意:
即一个m个点的图,求走n步,所能获得的最大权值
n(2e5),m(100)
时间限制:2s,样例:10组
思路1:dp
dp[i][j]表示i步到达j所能获得的最大权值
for i=1:n
for j=1:m
for k=1:m
dp[i][j]=max(dp[i][j],dp[i][k]+v[k][j]);
复杂度为 n*m^2, 复杂度会爆的
思路2:
考虑下最短路中松弛的说法,我们定义为扩张
for i=1:m
for j=1:m
for k=1:m
f[i][j]=max(f[i][j],f[i][k]+v[k][j]);
每经历过1次 m^3的扩展相当于走了一步
走n步的时候相当于 扩展n次
复杂度即为 n*m^3
考虑该代码的形式,即v数组是不变的
考虑这个n能不能化简掉
楼上代码的形式很像矩阵乘法6666啊
考虑下快速幂的方法>>>因为固定起点是A,终点是B,走七步,那么结果一定等于max(f A,3,j+f j,4,B)的结果
所以其满足结合律
能满足结合律的话,那么就一定能满足运用快速幂的形式,刚刚zzy大佬讲解的好精辟
66666>>>感谢大佬

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct mat{
	ll a[110][110];
	mat(){memset(a,0,sizeof(a));}
};
int n,m;
mat multi(mat x,mat y){
	mat res;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=m;j++)
			for(int k=1;k<=m;k++)
				res.a[i][j]=max(res.a[i][j],x.a[i][k]+y.a[k][j]);
	return res;
}
mat pow_(mat a,int n){
	mat res;mat tmp=a;
	while(n){
		if(n&1) res=multi(res,tmp);
		tmp=multi(tmp,tmp);
		n>>=1;
	}
	return res;
}
int main(){
	while(~scanf("%d%d",&n,&m)){
		mat ans;
		for(int i=1;i<=m;i++)
			for(int j=1;j<=m;j++)
				scanf("%lld",&ans.a[i][j]);
		ans=pow_(ans,n-1);
		ll max_=0;
		for(int i=1;i<=m;i++)
			for(int j=1;j<=m;j++)
				max_=max(max_,ans.a[i][j]);
		printf("%lld\n",max_);
	}
	return 0;
}

  考虑下更通俗的题目,推广到所有的图,均可应用,前提是节点个数不应该超过200个,不然不能对其进行应用floyd型处理

记得zoj有道类似的题目

  Mistwald(ZOJ3479) 其题目的意思是给出n*m个点,然后每个点会往其他的点移动,然后给定移动的方向点。求判断,在规定步数下,一定能到达终点输出t            rue,不一定就maybe,否则就False。

  同样的问题>>>>>>年轻是真的傻

总结:即在判断点的连通性,给定步数,问能否到达某个点,或者是说给定步数求最大路径的权值 >>在点数量范围能允许的情况下,可以运用floyd进行判断>>>>>>>>>>

收获:对快速幂的应用更加了解深入,类乘法快速幂,所需要的条件是需要满足结合律>>>>>>

原文地址:https://www.cnblogs.com/vainglory/p/9141551.html

时间: 2024-11-29 00:13:52

江苏徐州邀请赛 I题 类矩阵快速幂的相关文章

BNUOJ 34985 Elegant String 2014北京邀请赛E题 动态规划 矩阵快速幂

Elegant String Time Limit: 1000msMemory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main We define a kind of strings as elegant string: among all the substrings of an elegant string, none of them is a permutation of "0, 1,-, k

HDU 5863 cjj&#39;s string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但是 m 很小的时候 发现此题DP并不合适.于是想可能是某种组合数学的问题可以直接公式算 看到题解的我.恍然大悟.对于这种数据.可以考虑一下矩阵快速幂优化的DP 首先要想到线性递推的 DP 式子 最直观的想法就是 dp[i][j] = 到第 i 个位置为止.前面最长匹配长度为 j 的方案数 但是如果仔

(中等) CF 576D Flights for Regular Customers (#319 Div1 D题),矩阵快速幂。

In the country there are exactly n cities numbered with positive integers from 1 to n. In each city there is an airport is located. Also, there is the only one airline, which makes m flights. Unfortunately, to use them, you need to be a regular custo

华东交通大学2018年ACM“双基”程序设计竞赛 C. 公式题 (2) (矩阵快速幂)

题目链接:公式题 (2) 比赛链接:华东交通大学2018年ACM"双基"程序设计竞赛 题目描述 令f(n)=2f(n-1)+3f(n-2)+n,f(1)=1,f(2)=2 令g(n)=g(n-1)+f(n)+n*n,g(1)=2 告诉你n,输出g(n)的结果,结果对1e9+7取模 输入描述: 多组输入,每行一个整数n(1<=n<=1e9),如果输入为0,停止程序. 输出描述: 在一行中输出对应g(n)的值,结果对1e9+7取模. 示例1 输入 1 5 9 456 0 输出

2013长沙邀请赛A So Easy!(矩阵快速幂,共轭)

So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2286    Accepted Submission(s): 710 Problem Description A sequence Sn is defined as:Where a, b, n, m are positive integers.┌x┐is the ceil

Bzoj2510 弱题(矩阵快速幂)

题面(权限题) 题解 一道概率\(dp\),可以设\(f[i][j]\)表示第\(i\)次操作后,标号为\(j\)的小球的期望个数,那么有: \[ \begin{aligned} &f[i][j]=(1-\frac 1m)f[i-1][j]+\frac1mf[i-1][j-1](1\leq j\leq n) \&f[i][0]=(1-\frac 1m)f[i-1][j]+\frac1mf[i-1][n] \end{aligned} \] 这样的话转移可以写成矩阵的形式(假设有\(4\)个小

P3390 【模板】矩阵快速幂

题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k 共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7 输入输出样例 输入样例#1: 2 1 1 1 1 1 输出样例#1: 1 1 1 1 说明 n<=100, k<=10^12, |矩阵元素|<=1000 算法:矩阵快速幂 如题,矩阵快速幂. 已知,矩阵乘

矩阵快速幂(入门) 学习笔记hdu1005, hdu1575, hdu1757

矩阵快速幂是基于普通的快速幂的一种扩展,如果不知道的快速幂的请参见http://www.cnblogs.com/Howe-Young/p/4097277.html.二进制这个东西太神奇了,好多优秀的算法都跟他有关系,这里所说的矩阵快速幂就是把原来普通快速幂的数换成了矩阵而已,只不过重载了一下运算符*就可以了,也就是矩阵的乘法,  当然也可以写成函数,标题中的这三个题都是关于矩阵快速幂的基础题.拿来练习练习熟悉矩阵快速幂,然后再做比较难点的,其实矩阵快速幂比较难的是构造矩阵.下面还是那题目直接说话

[矩阵快速幂]T-shirt(2018江苏邀请赛I题)

题目描述 JSZKC is going to spend his vacation! His vacation has N days. Each day, he can choose a T-shirt to wear. Obviously, he doesn’t want to wear a singer color T-shirt since others will consider he has worn one T-shirt all the time. To avoid this pr