关闭

hdu 4804 Campus Design 轮廓线dp

标签: algorithmdp轮廓线dp
713人阅读 评论(0) 收藏 举报
分类:
hdu 4804 Campus Design 轮廓线dp

题意:
给出一个n*m的01矩阵,其中要求把矩阵里面的1用1*1或1*2的砖块铺满,矩阵里面的0为障碍物,问使用1*1的砖块数>=c && <=d 的方案有多少种。

限制:
1 <= n <= 100; 1 <= m <= 10; 1 <= c <= d <= 20;

思路:
因为 1 <= m <= 10 所以可以采用轮廓线dp,
具体状态解释在代码中说明。

/*hdu 4804 Campus Design 轮廓线dp
  题意:
  给出一个n*m的01矩阵,其中要求把矩阵里面的1用1*1或1*2的砖块铺满,矩阵里面的0为障碍物,问使用1*1的砖块数>=c && <=d 的方案有多少种。
  限制:
  1 <= n <= 100; 1 <= m <= 10; 1 <= c <= d <= 20;
  思路:
  因为 1 <= m <= 10 所以可以采用轮廓线dp,
  具体状态解释在代码中说明。
 */
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define LL __int64
const int MOD=1000000007;
const int N=105;
char mp[N][15];
LL dp[2][25][1030];
void gao(int n,int m,int c,int d){
	int limit=(1<<m);
	//cout<<limit<<endl;
	int now=0,pre=1;
	memset(dp[now],0,sizeof(dp[now]));
	dp[now][0][limit-1]=1;
	for(int i=0;i<n;++i){
		for(int j=0;j<m;++j){
			swap(now,pre);
			memset(dp[now],0,sizeof(dp[now]));
			for(int s=0;s<limit;++s){
				//cout<<mp[i][j]<<"!"<<endl;
				if(mp[i][j]=='1'){
					for(int k=0;k<=d;++k){
						if(s & (1<<j))	//不放砖头
							dp[now][k][s ^ (1<<j)]=(dp[now][k][s ^ (1<<j)]+dp[pre][k][s])%MOD;
						if(s & (1<<j))	//放置1*1
							dp[now][k+1][s]=(dp[now][k+1][s]+dp[pre][k][s])%MOD;
						if(j && !(s & (1<<(j-1))) && (s & (1<<j))) //横放1*2
							dp[now][k][s | (1<<(j-1))]=(dp[now][k][s | (1<<(j-1))] + dp[pre][k][s])%MOD;
						if(i && !(s & (1<<j)))	//竖放1*2
							dp[now][k][s ^ (1<<j)]=(dp[now][k][s ^ (1<<j)]+dp[pre][k][s])%MOD;
					}
				}
				else{
					for(int k=0;k<=d;++k){
						if(s & (1<<j))	//判断障碍物
							dp[now][k][s]=(dp[now][k][s]+dp[pre][k][s])%MOD;
					}
				}
			}
		}
	}
	//cout<<now<<endl;
	LL ans=0;
	for(int i=c;i<=d;++i)
		ans=(ans+dp[now][i][limit-1])%MOD;
	cout<<ans<<endl;
}
int main(){
	int n,m,c,d;
	while(cin>>n>>m>>c>>d){
		for(int i=0;i<n;++i)
			scanf("%s",mp[i]);
		gao(n,m,c,d);
	}
	return 0;
}


0
0
查看评论

HDU - 4804:Campus Design(状压DP)

HDU - 4804:Campus Design (状压DP) Nanjing University of Science and Technology is celebrating its 60th anniversary. In order to make room for student ac...
  • Mitsuha_
  • Mitsuha_
  • 2017-08-03 20:29
  • 299

POJ 2411 HDU4804【轮廓线+状压DP】

POJ2411传送门   题意:给出一个n*m的矩形,然后用1*2大小的多米若骨牌去填充n*m的这个矩形,问有多少种填充方法。 分析:由于每个骨牌是1*2的矩形,之前的状压套路都不管用啦,然后去找博客是轮廓线,然后学习一下。     &...
  • m0_37953323
  • m0_37953323
  • 2017-08-16 19:27
  • 142

HDU 4804 Campus Design(插头DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4804 题意:给定一个图,0是不能放的,然后现在有1X1和1X2方块,最后铺满该图,使得1X1使用次数在C到D之间,1X2次数随便,问有几种放法 思路:插头DP的变形,只要多考虑1X1的情况即可,然后...
  • u011217342
  • u011217342
  • 2014-05-17 21:47
  • 1684

hdu4804Campus Design(轮廓线dp)

题目链接:点这里!!! 题意:给你一个n*m的矩阵(1 题解: 基础的轮廓线dp,分情况讨论清楚。 1、我们设dp[cur][g][k]为当前情况已用了g个1*1的板子枚举状态为k的方案数。 2、假设当前(i,j)是障碍物的话,说明我(i,j)这个点不用填东西,并且(i,j...
  • u014325920
  • u014325920
  • 2016-08-08 22:17
  • 469

HDU 4804 Campus Design 轮廓线DP

题意:给出一个校园,用1*1的砖和1*2的砖将其
  • u012139398
  • u012139398
  • 2014-09-30 20:15
  • 607

HDU 4804 Campus Design 轮廓线DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4804分情况讨论: 1.枚举的点上有障碍物,那么上一个阶段的状态,在这个点上面的格子一定有被填充 2.枚举的点上没有障碍物 a.这个格子不放,那么上一个阶段的状态上,这个点上面的格子一定有被填充 ...
  • SolarDomo
  • SolarDomo
  • 2016-12-07 15:20
  • 150

hdu 4804 Campus Design dp(记忆化搜索 /轮廓线 )

Campus Design Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 994 &...
  • yskyskyer123
  • yskyskyer123
  • 2016-07-01 21:21
  • 247

Campus Design HDU - 4804 (状压dp,轮廓线dp)

Problem Description Nanjing University of Science and Technology is celebrating its 60th anniversary. In order to make room for student activities, t...
  • elbadaernu
  • elbadaernu
  • 2017-10-03 21:59
  • 206

hdu 4804 Campus Design

Problem acm.hdu.edu.cn/showproblem.php?pid=4804 vjudge.net/contest/194949#problem/C(密码:sesefadou) Meaning n * m 的地板要铺满地砖,其中有一些格是有花的不能铺。砖有 1 * 1 ...
  • HackerTom
  • HackerTom
  • 2018-01-30 16:26
  • 47

HDU 4804 Campus Design

轮廓线动态规划. 状态比较好想,注意转移状态以及位运算.状态转移方式见代码. #include #include const int MOD = 1000000007; inline void add(int &x, int y) { x += y; while ...
  • u011277193
  • u011277193
  • 2014-11-02 22:27
  • 260
    个人资料
    • 访问:156284次
    • 积分:3607
    • 等级:
    • 排名:第10780名
    • 原创:213篇
    • 转载:3篇
    • 译文:0篇
    • 评论:43条
    最新评论