轮廓线DP POJ3254 && BZOJ 1087
2015-10-02 20:32
148 查看
补了一发轮廓线DP,发现完全没有必要从右往左设置状态,自然一点:
5 6 7 8 9
1 2 3 4
如此设置轮廓线标号,转移的时候直接把当前j位改成0或者1就行了。注意多记录些信息对简化代码是很有帮助的,尤其对于我这种代码经常错的一塌糊涂的人来说。。
呆马:
POJ 3254 Corn Fields
Kings
5 6 7 8 9
1 2 3 4
如此设置轮廓线标号,转移的时候直接把当前j位改成0或者1就行了。注意多记录些信息对简化代码是很有帮助的,尤其对于我这种代码经常错的一塌糊涂的人来说。。
呆马:
POJ 3254 Corn Fields
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #define inf 1000000007 #define oo 100000000 #define maxn 11 #define maxm 1050 using namespace std; int n,m,mb; long long f[maxn][maxn][88][maxm]; int bit[maxm][maxn]; bool legal(int x, int y,int mask) { if (y==1) { if (bit[mask] &bit[mask][n+1]) return 0; if (bit[mask][n-1]&bit[mask][n+1]) return 0; } else { if (bit[mask][y-1]&bit[mask][n+1]) return 0; if (bit[mask][y-2]&bit[mask][n+1]) return 0; } for (int i=1;i<n;i++) if (bit[mask][i]&bit[mask][i+1]) return 0; return 1; } int main() { scanf("%d%d",&n,&m); mb=(1<<(n+1))-1; memset(bit,0,sizeof(bit)); for (int mask=0;mask<=mb;mask++) { int tmp=mask; for (int i=1;i<=n+1;i++) { bit[mask][i]=tmp%2; tmp/=2; } } memset(f,0,sizeof(f)); f[0] [0][0]=1; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) for (int k=0;k<=m;k++) for (int mask=0;mask<=mb;mask++) if (legal(i,j,mask)) { int tmp=1<<(j-1); int ost=mask&(~tmp),nst=mask|tmp; if (((mask>>(j-1))&1)!=((mask>>n)&1)) ost^=(1<<n),nst^=(1<<n); if (j==1) { f[i][j][k][ost]+=f[i-1] [k][mask]; if (k && !bit[mask][j] && !bit[mask][j+1] && !bit[mask][j-1]) f[i][j][k][nst]+=f[i-1] [k-1][mask]; } else { f[i][j][k][ost]+=f[i][j-1][k][mask]; if (k && !bit[mask][j] && !bit[mask][j+1] && !bit[mask][j-1] && !bit[mask][n+1]) f[i][j][k][nst]+=f[i][j-1][k-1][mask]; } } long long ans=0; for (int mask=0;mask<=mb;mask++) if (legal(n+1,1,mask)) { ans+=f [m][mask]; } printf("%lld\n",ans); return 0; }
Kings
相关文章推荐
- Repo安装遇到问题
- TTL值的含义以及与域名DNS TTL值的区别
- PHP、Mysql等网站建设交流看我另一个博客
- light oj 1029 - Civil and Evil Engineer (最大生成树+最小生成树)
- linux下的硬连接和符号链接(软连接)
- 安卓在xml文件(布局文件)中做一些细微改变却运行程序报错的原因
- 推断序列的端部的大小C规划
- 让HTML页面元素居中的各种实现方法
- 网络编程
- SLC教程
- unity3d 中 transform.position 与Rigidbody.position的同步问题
- hdu 5471(状压DP or 容斥)
- Java 常见异常及趣味解释
- 矩阵转置(数据结构课本内容)
- 将博客搬至CSDN
- VTK利用点云高程渲染点云(方法二:vtkUnstructuredGrid)
- iOS8之后UIAlertController
- pat1013Battle Over Cities (25)
- 每日三个笑话-20151002
- ./configure 出现package was not found问题的解决办法