tyvj 4541 四维动态规划

来源:互联网 发布:linux mint 18.2 编辑:程序博客网 时间:2024/06/09 18:49

描述

在一个N×M的棋盘上,要求放置K个车,使得不存在一个车同时能被两个车攻击。问方案数。

输入格式

一行三个整数,N,M,K。

输出格式

一行一个整数,代表答案对1000001取模之后的值。

备注

【样例输入1】
4 5 2
【样例输出1】
190
【样例输入2】
2 3 3
【样例输出2】
6
【样例输入3】
6 7 20
【样例输出3】
0
【样例输入4】
23 37 39
【样例输出4】
288688
【样例解释】
【数据规模与约定】
对于100%的数据,1≤N,M≤50,1≤K≤100。

分析:说实话第一次看题就觉得是状态压缩+搜索,因为之前做过的n皇后……然而这数据范围搜索肯定会炸。

所以我们考虑dp

一开始的想法就是f[i,j,k,l]表示前i行有j列放了一个车,有k列放了两个车,总共放了l个车的方案数。那么就是说如果第i行只放一个车的话我就可以有两种选择:一种是放在一个空列中(数量为m-j-k),一种是放在一个只放了一个车的列。但考虑第二种选择,如果该列上的车所在的行还有另一个车,那么其实这一列是不能再放一个车的。那么我们就把状态改一下:

f[i,j,k,l]表示前i行,有j列是只放了一个车且还可以再放一个车,有k列是不能再放的(包括放了两个车的列和放了一个车但不能再放的列),l表示已经放了多少个车。

f[i-1,j,k,l]表示第i行不放车

f[i-1,j-1,k,l-1]*(m-j-k+1)表示第i行放一个车且把车放到一个原本没有车的列上

f[i-1,j+1,k-1,l-1]*(j-1)表示第i行放一个车且把车放到一个原本有一个车的列上

f[i-1,j,k-2,l-2]*(m-j-k+2)*(m-j-k+1)/2表示第i行放两个车

f[i][j][k][l]=f[i-1][j][k][l]+f[i-1][j-1][k][l-1]*(m-j-k+1)+f[i-1][j+1][k-1][l-1]*(j+1)+f[i-1][j][k-2][l-2]*(m-j-k+2)*(m-j-k+1)/2

可以用滚动数组优化空间


代码:

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define MOD 1000001using namespace std;int f[2][60][60][110],n,m,tot;int main(){scanf("%d%d%d",&n,&m,&tot);int now=0;f[now][0][0][0]=1;for (int i=1;i<=n;i++){now=1-now;memset(f[now],0,sizeof(f[now]));for (int j=0;j<=m;j++)for (int k=0;k<=m-j;k++)for (int l=j+k;l<=min(j+k*2,tot);l++){//f[now][j][k][l]=(f[1-now][j][k][l]+f[1-now][j-1][k][l-1]*(m-j-k+1)+f[1-now][j+1][k-1][l-1]*(j+1)+f[1-now][j][k-2][l-2]*(m-j-k+2)*(m-j-k+1)/2)%MOD;f[now][j][k][l]=f[1-now][j][k][l];if (j&&l) f[now][j][k][l]+=f[1-now][j-1][k][l-1]*(m-j-k+1);if (k&&l) f[now][j][k][l]+=f[1-now][j+1][k-1][l-1]*(j+1);if (k>1&&l>1) f[now][j][k][l]+=f[1-now][j][k-2][l-2]*(m-j-k+2)*(m-j-k+1)/2;f[now][j][k][l]%=MOD;}}int ans=0;for (int i=0;i<=m;i++)for (int j=0;j<=m-i;j++)ans=(ans+f[now][i][j][tot])%MOD;printf("%d",ans);return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕39周胎儿头小怎么办 怀孕腰两侧长肉怎么办 怀孕四个月半月吃点就饱怎么办啊 怀孕四个月睡眠不好怎么办 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办 怀孕脸胖了好多怎么办 孕晚期不爱吃肉怎么办 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办 怀孕七个月了胎位不正怎么办 怀孕七个月胎位不正怎么办 怀孕肚子上有妊娠纹怎么办 怀孕九个月肚子长痱子怎么办 怀孕前体重偏胖怎么办 怀孕打胰岛素血糖控制不好怎么办 孕后期憋的难受怎么办 怀孕6个月不想生怎么办 孕六个月不想要怎么办 怀孕9个月喝酒了怎么办 怀孕8个月喝醉了怎么办 怀孕6个月胃酸烧心怎么办 怀孕7个月胃酸怎么办