POJ 3254 Corn Fields
2016-04-18 17:09
330 查看
题目链接:http://poj.org/problem?id=3254
题意:在n×m的地图上,有一些地方可以放牛,有一些地方不可以,而且一只牛的上下左右位置不可以再放其它的牛,求在给定地图上一共有多少种放牛方案。
思路:状态压缩DP,我们一行一行的放,当前行放置会受到上一行放置状态的影响,我们用dp[i][s]表示第i行的放置状态为s时的方案数,那么dp[i][s] = ∑dp[i-1][s'] ( s' & s == 0 )那么最后答案是∑dp
[s]。我们先将每一行的可行状态预处理出来,用的时候就可以直接用了。
题意:在n×m的地图上,有一些地方可以放牛,有一些地方不可以,而且一只牛的上下左右位置不可以再放其它的牛,求在给定地图上一共有多少种放牛方案。
思路:状态压缩DP,我们一行一行的放,当前行放置会受到上一行放置状态的影响,我们用dp[i][s]表示第i行的放置状态为s时的方案数,那么dp[i][s] = ∑dp[i-1][s'] ( s' & s == 0 )那么最后答案是∑dp
[s]。我们先将每一行的可行状态预处理出来,用的时候就可以直接用了。
#include <cstdio> #include <cmath> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <stack> #include <map> #include <set> #include <vector> #include <sstream> #include <queue> #include <utility> using namespace std; #define rep(i,j,k) for (int i=j;i<=k;i++) #define Rrep(i,j,k) for (int i=j;i>=k;i--) #define Clean(x,y) memset(x,y,sizeof(x)) #define LL long long #define ULL unsigned long long #define inf 0x7fffffff #define mod 100000000 int n,m; int a[15][15]; int now[15]; //地图每一行的状态 vector<int> state[15]; //每一行的可行状态 int dp[15][1<<13]; void init() { scanf("%d%d",&n,&m); rep(i,1,n) { now[i] = 0; rep(j,1,m) { scanf("%d",&a[i][j]); a[i][j] = 1 - a[i][j]; now[i] = now[i] * 2 + a[i][j]; } } int uplim = 1<<m; state[0].clear(); state[0].push_back(0); rep(i,1,n) { state[i].clear(); rep(j,0,uplim-1) { if ( now[i] & j ) continue; //放到障碍处 if ( j & (j<<1) ) continue; state[i].push_back(j); } } } void DP() { Clean(dp,0); rep(i,0,state[1].size()-1) dp[1][i] = 1; rep(i,2,n) rep(j,0,state[i].size()-1) rep(k,0,state[i-1].size()-1) { if ( state[i][j] & state[i-1][k] ) continue; dp[i][j] += dp[i-1][k]; dp[i][j] %= mod; } int ans = 0; rep(i,0,state .size()-1) ans = ( ans + dp [i] ) % mod; cout<<ans<<endl; } int main() { init(); DP(); return 0; }
相关文章推荐
- js方法 汉字转换为拼音
- LeetCode OJ 92. Reverse Linked List II
- FMX对象释放
- VisualVM连接远程Java进程
- 24点游戏算法
- java学习笔记(一)
- C#学习笔记二 引用参数和值参数
- 挺好的 过程里面有些可取之处
- SharedPreferences
- 新绑定业务修改点
- Android面试及使用技术点总结
- 应用ModelState和Data Annotation做服务器端数据验证
- C-IDE使用帮助
- MapReduce计算框架
- Android插件化框架研究-DroidPlugin
- createrepo
- Android Studio 如何打JAR包
- recyclerview显示的宽度只有屏幕的一部分
- 对DllRegisterServer的调用失败,错误代码为0x8007005的解决办法,注册控件
- java学习 集合之LinkedList