题目传送门

$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. centos或者ubuntu设置ssh免密码登陆

    1. 输入  # ssh-keygen -t rsa -P ""  然后一路回车 2.输入  # cat ~/.ssh/id_rsa.pub >> ~/.ssh/aut ...

  2. HDU 3039 Go Home

    今天本来解决的很好,本来可以不聊那么结束,但是我想更完美一点,多聊几句,谁知道就聊了很长时间,很傻逼.耽误了时间! /***************************************** ...

  3. hive:Access denied for user &#39;root&#39;@&#39;%&#39;

    配置hive全分布模式时候,在mysql里面创建用户:create user 'hive' identified by 'hive'; 然后给hive帐号分配全部权限: grant all privi ...

  4. Python - scrapy安装中libxml2问题

    先到 http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 下载下面三个库的 whl,然后用pip install 来安装即可 pycurl,lxml,lib ...

  5. OpenStack源码系列---nova-api

    OpenStack源码实际上是比较规范的,但是对刚刚接触到源代码的人来说,却感觉有点混乱.我刚开始的时候也常常搞乱,比如service.Service类继承自openstack.common.serv ...

  6. ubuntu git ssh不通

    xyh@ubuntu-64:~$ ssh -v git@danxinben.com                                                            ...

  7. Mac版的idea部分按钮失效的解决方案

    问题描述:调整了一下idea中jdk的路径,之后idea就无法打开新项目了,最好发现idea中的顶部菜单全部失效 解决过程: 1.把idea的jdk的路径调回去,无效 2.重启idea,无效 3.重启 ...

  8. poj 3585 Accumulation Degree(二次扫描和换根法)

    Accumulation Degree 大致题意:有一棵流量树,它的每一条边都有一个正流量,树上所有度数为一的节点都是出口,相应的树上每一个节点都有一个权值,它表示从这个节点向其他出口可以输送的最大总 ...

  9. IDEA中Git的应用场景

    工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程git仓库上获取项目源码 场景三:小 ...

  10. swift的String处理

    import UIKit import CoreText class ViewController: UIViewController { override func viewDidLoad() { ...