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了,赶紧 ...
随机推荐
- Intel Active Management Technology
http://en.wikipedia.org/wiki/Intel_Active_Management_Technology Intel Active Management Technology F ...
- C开发人员眼中的SICP学习
谈谈自己看SICP的一些体会 第一章 构造过程抽象 这一章事实上和C语言全然等价, 不打算深入学习LISP的能够高速略过. 思想上没有太多新的东西. 这一章最核心的价值就是以下3句话, 理解了这一章 ...
- OpenStack源码系列---起始篇
近一年来我负责公司云点的自动化部署工作,包括公司自有云平台方案.XenServer.vSphere.Ovirt和OpenStack的自动化安装部署,目前已经到了OpenStack这一部分.自动化部署首 ...
- angularjs中常见错误
使用angularjs时间不是非常长,理解不够透彻.但为刚開始学习的人还是能够帮助点的. 1.回调函数. . ...-->切记它是异步的,出现莫名其妙的问题记得查看一下 2.内存泄露. .... ...
- Arcgis Engine(ae)接口详解(8):临时元素(element)
//主地图的地图(map)对象 IMap map = null; IActiveView activeView = null; //IGraphicsContainer用于操作临时元素,可以通过map ...
- 获取Wifi密码,不知道是不是真的
package com.example.wifipassword; import java.util.List; import android.app.Activity; import android ...
- 百度ai 基于node 语音识别 音频文件类型转换
百度ai 基于node 语音识别 音频文件类型转换 项目简介 源代码移步:https://github.com/xuess/ai-baidu-node 本项目主要功能为,本地音频语音识别和文件类型转换 ...
- android studio Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"
android studio运行会遇到Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Reques ...
- NIO原理图
- 使用libcurl的包装库cpr发起http请求
cpr GitHub地址https://github.com/whoshuu/cpr 简单示例:cpr_http_request.cpp #include <iostream> #incl ...