洛谷 1373 小a和uim之大逃离
/*
很容易想到f[i][j][k][l][01] 表示到ij点 两个人得分为kl 01表示这一步谁走的
因为起点不同 路径不同 所以要枚举起点..
时间复杂度 O(nmk*nmk)
空间复杂度 O(2*nmkk)
超时爆空间.....
40分
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 810
#define mod 1000000007
using namespace std;
int n,m,K,ans,a[maxn][maxn];
int f[][][][][];
void Clear(int x,int y)
{
for(int i=x;i<=n;i++)
for(int j=y;j<=m;j++)
for(int k=;k<=K;k++)
for(int l=;l<=K;l++)
{
f[i][j][k][l][]=;
f[i][j][k][l][]=;
}
}
int main()
{
scanf("%d%d%d",&n,&m,&K);K++;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&a[i][j]);
for(int x=;x<=n;x++)
for(int y=;y<=m;y++)
{
Clear(x,y);
f[x][y][a[x][y]%K][][]=;
for(int i=x;i<=n;i++)
for(int j=y;j<=m;j++)
for(int k=;k<K;k++)
for(int l=;l<K;l++)
{
if(i+<=n)
{
f[i+][j][(k+a[i+][j])%K][l][]=(f[i+][j][(k+a[i+][j])%K][l][]+f[i][j][k][l][])%mod;
f[i+][j][k][(l+a[i+][j])%K][]=(f[i+][j][k][(l+a[i+][j])%K][]+f[i][j][k][l][])%mod;
}
if(j+<=m)
{
f[i][j+][(k+a[i][j+])%K][l][]=(f[i][j+][(k+a[i][j+])%K][l][]+f[i][j][k][l][])%mod;
f[i][j+][k][(l+a[i][j+])%K][]=(f[i][j+][k][(l+a[i][j+])%K][]+f[i][j][k][l][])%mod;
}
if(k==l)ans=(ans+f[i][j][k][l][])%mod;
}
}
printf("%d\n",ans);
return ;
}
/*
其实刚才的状态可以降一维 把kl改为两个人的差值
但是会出现负数 考试的时候想到数组平移 但是答案就不对了....
然后打了暴力 6层循环 美美的~ 后来终于在眼泪中明白 数组平移个卵...
因为在Mod的意义下 平移之后状态就不对应了
不平移mod完之后在+K不就好了嘛
还有就是傻傻的枚举起点了..赋好初值 从1 1开始就好了吗
反正最后统计方案数 互相之间不影响
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 810
#define mod 1000000007
using namespace std;
int n,m,K,ans,a[maxn][maxn];
int f[maxn][maxn][][];
int main()
{
scanf("%d%d%d",&n,&m,&K);K++;
memset(f,,sizeof(f));
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
f[i][j][a[i][j]%K][]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<K;k++)
{
if(i+<=n)
{
f[i+][j][(k+a[i+][j])%K][]=(f[i+][j][(k+a[i+][j])%K][]+f[i][j][k][])%mod;
f[i+][j][(k-a[i+][j]+K)%K][]=(f[i+][j][(k-a[i+][j]+K)%K][]+f[i][j][k][])%mod;
}
if(j+<=m)
{
f[i][j+][(k+a[i][j+])%K][]=(f[i][j+][(k+a[i][j+])%K][]+f[i][j][k][])%mod;
f[i][j+][(k-a[i][j+]+K)%K][]=(f[i][j+][(k-a[i][j+]+K)%K][]+f[i][j][k][])%mod;
}
if(k==)ans=(ans+f[i][j][k][])%mod;
}
printf("%d\n",ans);
return ;
}
洛谷 1373 小a和uim之大逃离的更多相关文章
- 洛谷1373 小a和uim之大逃离
洛谷1373 小a和uim之大逃离 本题地址:http://www.luogu.org/problem/show?pid=1373 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北 ...
- 洛谷1373小a和uim之大逃离
题目背景 小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之大逃离(坐标DP)
次元传送门:洛谷P1373 思路 设f[i][j][t][1/0]表示走到(i,j)时 小a减去uim的差值为t 当前是小a取(0) uim取(1) 那么转移就很明显了 f[i][j][t][]=(f ...
- 洛谷P1373 小a和uim之大逃离[背包DP]
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- 洛谷 P1373 小a和uim之大逃离 Label:dp 不会
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- 洛谷P1373 小a和uim之大逃离 dp
正解:dp 解题报告: 传送门! 同样是看到列表发的题解就想着跟着做下dp的题目趴 然后发现还挺难的,,,反正我只大概想到怎么转移但是初始化什么的都不会TT 所以还是大概说下QAQ 首先可以想到设f[ ...
- 洛谷 P1373 小a和uim之大逃离 题解
每日一题 day30 打卡 Analysis f[i][j][p][q]表示他们走到(i,j),且两人魔瓶内魔液量的差为p时的方法数.q=0表示最后一步是小a走的,q=1表示最后一步是uim走的.题目 ...
随机推荐
- 学会爱上iOS自动布局(Auto Layout) - 剑尖
本文翻译自Yari Dareglia的LEARN TO LOVE AUTO LAYOUT文章先生们,女士们,让我们以正确的心态开始本教程吧:自动布局就是简单!我花了一段时间来掌握自动布局是如何工作的, ...
- 新建maven project遇到的问题
在m2e安装成功之后,开始创建maven project了,但是出现了如下错误: 结果在很偶然的情况下让我解决了,就是更新下m2.respository,点击下图中的Update Settings -
- GIT,VAGRANT及COREOS
搞了COREOS才高大上啊. 测试DOCKER安装. 就是WIN下面GIT显得土豪..
- vsphere 出现“在主机的当前连接状况下不允许执行该操作”
问题: 登录vsphere client启动虚拟机出现“在主机的当前连接状况下不允许执行该操作” 解决方法: 1.选择主机->右键->断开 2.选择主机->右键->连接 3.在 ...
- Unity GUI编程
脚本语言:C# 附上一张图说明Unity GUI编程中可用的控件:(可能有遗漏) 下面列出一些例子来说明: 1.Groups : 在固定Layout模式中起到组织可用项的功能,它让你在屏幕的一个区域中 ...
- java数组学习
1. java数组的静态特性: java是静态语言,java中数组的长度是固定的.还有,数组元素的类型也是在定义时指定了的. 2. java数组里的关键词: 数组变 ...
- 固定IP和绑定了MAC,可以在设置无线路由器供笔记本电脑和平板上网吗?
固定IP和绑定了MAC,可以在设置无线路由器供笔记本电脑和平板上网吗? 这跟我们单位一样.很简单:首先要占一个 IP/MAC ,能上外网的,这首先要有,谁要肯给地址,我们这儿领导才有呢.我是网管,当然 ...
- Maximum Product Subarray——LeetCode
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- android导入项目出错处理
问题: 执行Import-Android下的Existing Android Code Into Workspace 解决方法:
- 译文链接:http://www.codeceo.com/article/10-truth-programmer-must-know.html
大多数时候,写代码都是挺有意义的一件事,不光能增加经验值,解决难题的时候还特别爽.耐心.毅力.执着,再加上正确的工具——只要有它们的亲密协作,优雅.漂亮的代码就是手到擒来的事儿. 但是,紧接着拙劣的资 ...