题目传送门

$50pts$:容易设计出状态$f[i][j][l][r][st]$表示当前的这个人在($i$,$j$),小a和uim魔瓶中的含量分别为$l$,$r$,当$st=0$表明现在是小a在吃,当$st=1$表明现在是uim吃(方案数)。注意赋初值为$f[i][j][mapp[i][j]][0][0]=1$。因为是从小a开始吃的。转移方程比较显然&麻烦,就写在代码里了。

但是还是有一些坑点的。比如模数是$k+1$,用刷表法(从当前状态推到之后状态)来防止出现负数。还和学长博客学到了一个神奇的方法:

void zy(int &x,int &y)
{
x=(x+y)%moder;
}
 #include<cstdio>
#include<algorithm> using namespace std;
const int moder=1e9+; int n,m,k,ans;
int mapp[][],f[][][][][]; void zy(int &x,int &y)
{
x=(x+y)%moder;
} int main()
{
scanf("%d%d%d",&n,&m,&k);
k++;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mapp[i][j]);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
f[i][j][mapp[i][j]][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int l=;l<=k-;l++)
for(int r=;r<=k-;r++)
{
zy(f[i+][j][(l+mapp[i+][j])%k][r][],f[i][j][l][r][]);
zy(f[i][j+][(l+mapp[i][j+])%k][r][],f[i][j][l][r][]);
zy(f[i+][j][l][(r+mapp[i+][j])%k][],f[i][j][l][r][]);
zy(f[i][j+][l][(r+mapp[i][j+])%k][],f[i][j][l][r][]);
if(l==r) (ans+=f[i][j][l][r][])%=moder;
}
printf("%d",ans);
return ;
}

50 pts

$100pts$:上面那个算法的复杂度是$O(n*m*k*k)$,复杂度显然会爆炸。考虑对dp进行优化,有优化状态和优化转移两种方法。状态貌似不能再优化了。

学长:那么这题的转移方程没有最值,没有单调性,那么我们只能优化状态。

考虑设计这样一个状态:$f[i][j][od][st]$表示当前的这个人在($i$,$j$),小a和uim的魔瓶内含量差为$od$的方案数。与之前有相似的转移方程及初值。这样我们的复杂度就是$O(n*m*k)$,可以过。

 #include<cstdio>
#include<algorithm> using namespace std;
const int moder=1e9+; int n,m,k,ans;
int mapp[][],f[][][][]; void zy(int &x,int &y)
{
x=(x+y)%moder;
} int main()
{
scanf("%d%d%d",&n,&m,&k);
k++;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mapp[i][j]);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
f[i][j][mapp[i][j]][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int od=;od<=k-;od++)
{
zy(f[i+][j][(od+mapp[i+][j]+k)%k][],f[i][j][od][]);
zy(f[i][j+][(od+mapp[i][j+]+k)%k][],f[i][j][od][]);
zy(f[i+][j][(od-mapp[i+][j]+k)%k][],f[i][j][od][]);
zy(f[i][j+][(od-mapp[i][j+]+k)%k][],f[i][j][od][]);
if(od==) (ans+=f[i][j][od][])%=moder;
}
printf("%d",ans);
return ;
}

AC

Luogu P1373 小a和uim之大逃离【dp】By cellur925的更多相关文章

  1. 【luogu P1373 小a和uim之大逃离】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1373 想不出来状态 看了一眼题解状态明白了 dp[i][j][h][1/0] 表示在i,j点差值为h是小A还 ...

  2. luogu P1373 小a和uim之大逃离

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  3. 洛谷P1373 小a和uim之大逃离 dp

    正解:dp 解题报告: 传送门! 同样是看到列表发的题解就想着跟着做下dp的题目趴 然后发现还挺难的,,,反正我只大概想到怎么转移但是初始化什么的都不会TT 所以还是大概说下QAQ 首先可以想到设f[ ...

  4. [P1373]小a和uim之大逃离 (DP)

    [题目链接] 模拟赛的时候的一道题 因为老师不小心把数据发下来了……我考试打表的 考完之后Orz xzjds 然后开始打正解 题意 大概就是两个人,走矩阵,两个人各加上走上的矩阵的数值,要求最终两个人 ...

  5. luogu 1373 小a和uim之大逃离 dp

    有取模操作,所以直接维护模意义下的差即可. Code: #include <bits/stdc++.h> #define M 16 #define N 801 #define ll lon ...

  6. 洛古 P1373 小a和uim之大逃离

    P1373 小a和uim之大逃离 题目提供者lzn 标签 动态规划 洛谷原创 难度 提高+/省选- 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电 ...

  7. 洛谷 P1373 小a和uim之大逃离

    2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...

  8. 洛谷P1373 小a和uim之大逃离

    P1373 小a和uim之大逃离 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从 ...

  9. 【题解】 P1373 小a和uim之大逃离

    题解 P1373 小a和uim之大逃离 传送门 一道dp好题 乍看此题,感觉要这样设计: \(dp(x)(y)(mod_{a})(mod_{uim})(0/1)\) , 但是我上午考试就MLE了,赶紧 ...

随机推荐

  1. ACM-ICPC如何起步[转]

    ACM-ICPC如何起步 刚刚绝定投身ACM-ICPC的同学先要过两关. 第一关:程序设计语言 如果学校有开设相关课程,则省去了很多麻烦.如果没有则可以选择<程序设计导引及在线实践>作为教 ...

  2. 新装Linux系统没有网卡驱动的解决办法和步骤

    Linux下查看网卡驱动和版本信息 - CSDN博客 https://blog.csdn.net/guyan1101/article/details/72770424/ 检查网卡是否加载 - Linu ...

  3. Micro Frontends

    Micro Frontends - extending the microservice idea to frontend development https://micro-frontends.or ...

  4. 关闭mongodb 集群

    [root@hadoop1 ~]# ps -aux | grep mongodb; root ? Sl : : /usr/local/mongodb/bin/mongod -f /usr/local/ ...

  5. C++中的const完全解析

    1. const修饰普通变量和指针 const修饰变量,一般有两种写法:const TYPE value;TYPE const value; 这两种写法在本质上是一样的.它的含义是:const修饰的类 ...

  6. 【转】【录教程必备】推荐几款屏幕录制工具(可录制GIF)

    我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...

  7. redis的图形界面管理工具

    大部分人都知道redis是一款用在缓存服务器上的软件,它与memcache类似,都可以存储海量的数据,用在大访问量的web网站.聊天记录存放等方面,但是又与memcache不同: 1.缓存数据可以持久 ...

  8. 大O符号

    大O 就是 时间复杂度.时间复杂度是大概的描述一个算法的用时(实际上从侧面的表达了他的效率) 最好时间复杂度,通常指在最好情形下,这个算法用时.反之,最坏情况下的就是最坏时间复杂度.通常 冒泡算法 的 ...

  9. String常量池

    http://developer.51cto.com/art/201106/266454.htm

  10. link与import区别

    本质上,这两种方式都是为了加载css文件,但还是存在细微的差别. 差别1:老祖宗的差别,link属于XHTML标签,而@import完全是css提供的一种方式. link标签除了可以加载css外,还可 ...