(Luogu) P1373 小a和uim之大逃离

2024-03-20 17:18
文章标签 luogu 之大 uim 逃离 p1373

本文主要是介绍(Luogu) P1373 小a和uim之大逃离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传送门

解题思路:这里dp要开4维,dp[i][j][t][p] 代表在 (i,j) 差值为t,p为角色(0为a,1为uim) 选择的方案数 。这样我们只要把dp[i][j][0][1]加起来就是所求的方案数了,其实条件是 dp[i][j][a[i][j]%(k+1)][0]=1; 因为每个点都可以为起点。如何更新状态的,我们这样规定 (A-B+k+1)%(k+1)=t%(k+1)   (A为小a,B为uim )。

如果当前是A选,意义就是 ((A+a[i][j])-B+k+1)%(k+1)=t%(k+1) ------> (A-B+k+1)%(k+1)=(t-a[i][j]+k+1)%(k+1) 即转移过来坐标的差为(t-a[i][j]+k+1)%(k+1),角色为1 即

dp[i][j][t][0]=( dp[i][j][t][0]+dp[i-1][j][(t-a[i][j]+k+1)%(k+1)][1] )%mod;
dp[i][j][t][0]=( dp[i][j][t][0]+dp[i][j-1][(t-a[i][j]+k+1)%(k+1)][1] )%mod;

如果当前是B选,意义就是 (A-(B+a[i][j])+k+1)%(k+1)=t %(k+1)------>(A-B+k+1)%(k+1)=(t+a[i][j])%(k+1) 即转移过来坐标的差为(t+a[i][j])%(k+1) ,角色为0 即 (代码写的时候复制粘贴上面的所以就没改)

dp[i][j][t][1]=( dp[i][j][t][1]+dp[i-1][j][(t+a[i][j]+k+1)%(k+1)][0] )%mod;
dp[i][j][t][1]=( dp[i][j][t][1]+dp[i][j-1][(t+a[i][j]+k+1)%(k+1)][0] )%mod;

代码如下: 

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<cmath>
#include<sstream>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const ll mod=1e9+7;
int dp[805][805][20][2];//dp[i][j][t][p] 在(i,j)差值为t,p为角色 0为a,1为uim 的方案数 
int a[805][805];
int n,m,k;
int main(){std::ios::sync_with_stdio(0);cin>>n>>m>>k;for(int i=1;i<=n;++i){for(int j=1;j<=m;++j){cin>>a[i][j];dp[i][j][a[i][j]%(k+1)][0]=1; }}ll ans=0;for(int i=1;i<=n;++i){for(int j=1;j<=m;++j){ for(int t=0;t<=k;++t){dp[i][j][t][0]=( dp[i][j][t][0]+dp[i-1][j][(t-a[i][j]+k+1)%(k+1)][1] )%mod;dp[i][j][t][0]=( dp[i][j][t][0]+dp[i][j-1][(t-a[i][j]+k+1)%(k+1)][1] )%mod;dp[i][j][t][1]=( dp[i][j][t][1]+dp[i-1][j][(t+a[i][j]+k+1)%(k+1)][0] )%mod;dp[i][j][t][1]=( dp[i][j][t][1]+dp[i][j-1][(t+a[i][j]+k+1)%(k+1)][0] )%mod;if(t==0)	ans=(ans+dp[i][j][t][1])%mod;}}}cout<<ans<<endl;return 0;
}

 

这篇关于(Luogu) P1373 小a和uim之大逃离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830184

相关文章

FHQ Treap模版(luogu P3369)

FHQ Treap模版(自用),带注释 #include<bits/stdc++.h>using namespace std;const int N=1e5+10;int n,root,idx;struct node{int l,r;int val,key,size;}tr[N];int getnew(int v){tr[++idx].val=v;//权值tr[idx].key=rand(

云计算之大数据(下)

目录 一、Hologres 1.1 产品定义 1.2 产品架构 1.3 Hologres基本概念 1.4 最佳实践 - Hologres分区表 1.5 最佳实践 - 分区字段设置 1.6 最佳实践 - 设置字段类型 1.7 最佳实践 - 存储属性设置 1.8 最佳实践 - 分布键设置 1.9 最佳实践 - 聚簇键设置 1.10 最佳实践 - 分段键设置 1.11 最佳实

大数据新视界--大数据大厂之大数据时代的璀璨导航星:Eureka 原理与实践深度探秘

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实用的内容知识,还可以毫无拘束地畅所欲言,尽情分享自己独特的见解。我真诚地期待着你们的到来,愿我们能在这片小小的天地里共同成长,共

《大话设计模式》之大总结

《大话设计模式》之大总结 前言:           有一种境界叫“持续的学习”,有一种生活叫讲故事,有一种人生叫好玩,这不,小编今天就为您献上设计模式之《大话设计模式》这本书,故事、原理、代码、好玩着呢,常常和同学交流中聊故事讲设计模式,下面是大话设计模式之大总结: 六大设计原则: “+”表示publi

LUOGU P2048 [NOI2010] 超级钢琴(贪心+堆)

原题链接:[NOI2010] 超级钢琴 题目大意: 给出一个长度为 n n n 的数组,且 a i a_{i} ai​ 可正可负,再给出三个数字 k , L , R k,L,R k,L,R 。 定义每个子数组的价值为其所有元素的和,你需要找到 k k k 个连续的子数组(可重叠但不可重复),且满足长度在 [ L , R ] [L,R] [L,R] 内,问你最后这 k k

每日一题~abc 367 F+luogu p10102(随机算法)

随机化的思想: 充分条件的计算代价比较大,想找个计算代价小的必要条件,但必要条件可能会出错,然后通过一些手段(比如随机映射)把这个出错的概率降低。(参考园子) 添加链接描述 题意: 两个数组,元素均为 1~N. q 次查询,判断 a b 数组,这一区间内的元素是否相同。(排列的顺序不重要,主要是元素的种类个数相同) n,q 均在2e5 内。 如果暴力,对每次查询,我们只能将这个区间内的所有数扫一

逃离北京回家创业--生存篇

创业的路上,并不总是激情和乐趣。当激情过了,就需要面对赤裸裸的现实。 首先要考虑团队的开销问题,虽然大家拿的工资并不高,但是四个人的工资加上房租水电,对于一个穷苦出身的程序员来说也是个不小的压力。为了给团队找个能够发展下去的持续动力,我想了挺多的办法。 我们在大学城里面创业,大学生是很好的资源。我首先想到的是办培训,我反复思考,我觉得想到了一个非常理想的运作模式。我们创业缺少的是两

逃离北京回家创业--团队组建篇

筹划好了自己的创业项目,然后就开始着手组建团队了。考虑到自己没有太多的资金支持,不能可能去社会上招经验丰富的员工,于是决定自己培养团队。 好在我技术选择的是nodejs和mongodb,前后端都用js开发起来学习成本相对较低。我选择办公地点在大学城,一方面是考虑到这里的房租相对便宜,另一方面这里周边有十几所大学,组建团队也比较方便。大学生虽然不像社会上招的熟练技术人员效率那么高,但是我坚信大学生

短剧APP小程序开发之大数据分析:短剧内容优化与运营策略

在当今数字化时代,大数据分析已成为各行各业不可或缺的一部分,特别是在短剧APP小程序开发中。通过深入分析用户行为和偏好,我们可以为短剧内容的制作、选购和运营策略提供有力的指导。 一、大数据分析在短剧内容制作中的应用 用户观看偏好分析:通过分析用户观看时长、观看频次、点赞和评论等数据,了解用户对不同类型、风格和题材的短剧偏好,为内容创作提供方向。 热门话题与趋势分析:利用大数据挖掘技术,

hdu 1728 逃离迷宫(搜索:BFS+优先队列)

问在给定转弯次数内能不能到达终点 因为限制了转弯次数,所以要想到每次取转弯次数最小的情况 看了网上好多人都是BFS+DFS,找到某一方向后沿着方向一直走 但我是用优先队列解决,每次取出转弯次数最小的情况,当然这样会慢一些 解决第一次转弯不计次数的方法是判断四个方向是否能加入队列,能的话加入即可 代码如下: #include <queue>#include <cstdio>#in