Luogu P1373 小a和uim之大逃离【dp】By cellur925
$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的更多相关文章
- 【luogu P1373 小a和uim之大逃离】 题解
题目链接:https://www.luogu.org/problemnew/show/P1373 想不出来状态 看了一眼题解状态明白了 dp[i][j][h][1/0] 表示在i,j点差值为h是小A还 ...
- luogu P1373 小a和uim之大逃离
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- 洛谷P1373 小a和uim之大逃离 dp
正解:dp 解题报告: 传送门! 同样是看到列表发的题解就想着跟着做下dp的题目趴 然后发现还挺难的,,,反正我只大概想到怎么转移但是初始化什么的都不会TT 所以还是大概说下QAQ 首先可以想到设f[ ...
- [P1373]小a和uim之大逃离 (DP)
[题目链接] 模拟赛的时候的一道题 因为老师不小心把数据发下来了……我考试打表的 考完之后Orz xzjds 然后开始打正解 题意 大概就是两个人,走矩阵,两个人各加上走上的矩阵的数值,要求最终两个人 ...
- luogu 1373 小a和uim之大逃离 dp
有取模操作,所以直接维护模意义下的差即可. Code: #include <bits/stdc++.h> #define M 16 #define N 801 #define ll lon ...
- 洛古 P1373 小a和uim之大逃离
P1373 小a和uim之大逃离 题目提供者lzn 标签 动态规划 洛谷原创 难度 提高+/省选- 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电 ...
- 洛谷 P1373 小a和uim之大逃离
2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...
- 洛谷P1373 小a和uim之大逃离
P1373 小a和uim之大逃离 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从 ...
- 【题解】 P1373 小a和uim之大逃离
题解 P1373 小a和uim之大逃离 传送门 一道dp好题 乍看此题,感觉要这样设计: \(dp(x)(y)(mod_{a})(mod_{uim})(0/1)\) , 但是我上午考试就MLE了,赶紧 ...
随机推荐
- Android Auto Scroll ViewPager (Smooth)
项目信息 项目地址 https://github.com/benniaobuguai/android-auto-scroll-viewpager 特性 支持自动平滑切换海报.相册等,无限次循环轮播 手 ...
- 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...
- Accelerated processing unit
http://en.wikipedia.org/wiki/Accelerated_processing_unit Accelerated processing unit From Wikipedia, ...
- POJ 2184 Cow Exhibition (01背包变形)(或者搜索)
Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10342 Accepted: 4048 D ...
- HDU 1114 Piggy-Bank (完全背包)
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- java设计模式----迭代器模式和组合模式
迭代器模式: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 设计原则: 单一责任:一个类应该只有一个引起变化的原因 组合模式: 允许你将对象组合成树形结构来表现“整体/部分” ...
- debian配置集锦
1 关闭蜂鸣 在/etc/bash.bashrc中加入下面的行: setterm -blength=0 2 debian bash路径显示太长 将.bashrc中的 else PS1='${debia ...
- CrateDb
CrateDB: Real-time SQL Database for Machine Data & IoT | Crate.io https://crate.io/
- queue — A synchronized queue class
https://docs.python.org/3.6/library/queue.html https://github.com/python/cpython/blob/3.6/Lib/queue. ...
- Tomcat启动报:invalid LOC header (bad signature)的问题
原因:这种一般是因为项目依赖的某个jar包损坏引起的, 解决办法: 1.右键项目,选择maven,更新(update maven project) 2.通过右击项目名 -> Run as -& ...