poj 3254 Corn Fields 状态压缩
来源:互联网 发布:mac os系统iso镜像下载 编辑:程序博客网 时间:2024/05/22 15:35
Description
Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and can't be planted. Canny FJ knows that the cows dislike eating close to each other, so when choosing which squares to plant, he avoids choosing squares that are adjacent; no two chosen squares share an edge. He has not yet made the final choice as to which squares to plant.
Being a very open-minded man, Farmer John wants to consider all possible options for how to choose the squares for planting. He is so open-minded that he considers choosing no squares as a valid option! Please help Farmer John determine the number of ways he can choose the squares to plant.
Input
Lines 2..M+1: Line i+1 describes row i of the pasture with N space-separated integers indicating whether a square is fertile (1 for fertile, 0 for infertile)
Output
Sample Input
2 31 1 10 1 0
Sample Output
9
Hint
1 2 3 4
第三个状态压缩 感觉智商遭到了侮辱 ∑(゚Д゚ノ)ノ
大意: 有一块由n*m个方格组成的农田,有些方块能种植谷物,有些方块不能种植谷物,现在fj有一些牛,这些牛吃谷物时各占一个方格,并且互不相邻,牛的数量不定并且牛只能在有农作物的方格里吃,给你田中每个方格的状态(0为可以种植 否则1),问有几种安排牛的方案。
解:牛的数量首先<=田中可以种植的方块的数量,详解如图:
下面是参考别的大神的代码 自己敲了个Orz(~ ̄▽ ̄)~(~ ̄▽ ̄)~ 一定要搞清楚 用十进制代表状态的思想
#include <iostream>#include <string.h>#include <algorithm>#include <stdio.h>#define N 12using namespace std;const int maxx=1<<12;const int mod=1e8;int k;int dp[15][maxx];int sto[maxx];int a[15],n,m;bool judge(int x){if (x&x<<1) return false;return true;}void init(){ int v=1<<m; k=0; for (int i=0;i<v;i++) { if (judge(i)) sto[++k]=i;}}bool base(int i,int l){if (i&a[l]) return false;return true;}int main(){int ans,v; while (~scanf("%d%d",&n,&m)) { init(); memset(dp,0,sizeof(dp)); ans=0; for (int i=1;i<=n;i++) { a[i]=0;for (int j=1;j<=m;j++){ scanf("%d",&v);if (v==0)a[i]+=(1<<(m-j));} for (int i=1;i<=k;i++)//给第一行设个初值 { if (base(sto[i],1)) dp[1][i]=1; } } for (int i=2;i<=n;i++) //从第二行开始累加 for (int j=1;j<=k;j++) { if (!base(sto[j],i)) continue; for (int q=1;q<=k;q++) { if (!base(sto[q],i-1))continue; if (sto[j]&sto[q])continue; dp[i][j]=(dp[i][j]+dp[i-1][q])%mod; } } for (int i=1;i<=k;i++) ans=(ans+dp[n][i])%mod; //计算第n行一共统计了多少种状态了 printf("%d\n",ans); } return 0;}
- poj 3254 Corn Fields //状态压缩DP
- POJ 3254 Corn Fields 状态压缩DP
- poj 3254 Corn Fields(状态压缩dp)
- POJ 3254 Corn Fields (状态压缩DP)
- poj-3254-Corn Fields-状态压缩DP
- poj 3254 Corn Fields (状态压缩DP)
- Poj 3254 Corn Fields 状态压缩
- POJ 3254 Corn Fields (状态压缩DP)
- POJ 3254 Corn Fields(状态压缩)
- POJ 3254 Corn Fields(状态压缩dp)
- POJ 3254 Corn Fields 状态压缩dp
- POJ 3254 Corn Fields 状态压缩DP
- poj 3254 Corn Fields ,状态压缩DP
- poj Corn Fields 3254 状态压缩dp
- POJ 3254 Corn Fields 状态压缩
- poj 3254 Corn Fields (状态压缩DP)
- POJ 3254 Corn Fields(状态压缩)
- Poj 3254 Corn Fields(状态压缩)
- 瑞银CEO:区块链在重塑行业过程中发挥“重大作用”
- 加泰罗尼亚考虑发行独立数字货币并推出电子户籍计划
- 日本SBI集团计划开展多项新计划,大力发展加密货币
- 比特币成为英国流行风尚,首家接受加密货币的奢侈品零售商Juliettes Interiors
- Spring基础知识点
- poj 3254 Corn Fields 状态压缩
- StringBuilder类为何比string的简单拼接效率高
- 适配器模式-对象适配器
- 关于海关企业信用管理的基础知识,看这篇就对了!
- SpringMVC中在Filter中如何获取ApplicationContext对象
- swift3\4:this class is not key value coding-compliant for the key xxx
- Failed to finalize session : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPa
- Oracle 索引的分类,分析与比较....(转载)
- C#通过WebClient/HttpWebRequest实现http的post/get方法与java对接