NOI 2001 炮兵阵地 状压dp
2016-07-30 00:20
405 查看
题目大意:给定n*m的网格,可以在网格上放取任意多的点,但要满足任意两点之间的距离大于2。问最多可以放几个点。
题目分析:首先题目以行作为状态很明显,但是又不能只考虑上一行的状态,而是要考虑前两行的状态。
所以设计状态f[i][j][k]表示第i行的状态为j,i-1行的状态为k的最大方案数。
考虑转移:f[i][j][k]=max(f[i][j][k],f[i-1][k][l]+val[j]);其中l表示i-2行的状态。val[j]表示的是i行取得状态j所对应的炮兵总数。
题目分析:首先题目以行作为状态很明显,但是又不能只考虑上一行的状态,而是要考虑前两行的状态。
所以设计状态f[i][j][k]表示第i行的状态为j,i-1行的状态为k的最大方案数。
考虑转移:f[i][j][k]=max(f[i][j][k],f[i-1][k][l]+val[j]);其中l表示i-2行的状态。val[j]表示的是i行取得状态j所对应的炮兵总数。
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #include<cmath> #include<cctype> #include<cassert> #include<climits> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define ForD(i,n) for(int i=n;i;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define RepD(i,n) for(int i=n;i>=0;i--) #define MEM(a) memset(a,0,sizeof(a)) #define MEMI(a) memset(a,127,sizeof(a)) #define MEMi(a) memset(a,128,sizeof(a)) #define INF (2139062143) #define phiF (1000000007) #define MAXN (1000000+10) typedef long long LL; int n,m,f[2][105][105],flag[205],s[205],val[205],num,ans; char c[105][15]; inline void dfs(int dep,int sta,int v){ if (dep>m){ s[++num]=sta; val[num]=v; return ; } dfs(dep+1,sta<<1,v); if (!(sta&3)) dfs(dep+1,(sta<<1)+1,v+1); } int main(){ scanf("%d%d\n",&n,&m); MEMi(f); For (i,n){ For (j,m) { scanf("%c",&c[i][j]); if (c[i][j]=='H') flag[i]=(flag[i]<<1)+1; else flag[i]=flag[i]<<1; } scanf("\n"); } dfs(1,0,0); f[0][1][1]=0; int low(0); For (i,n){ For (j,num) For (k,num) if (!(flag[i]&s[j])) For (l,num) if ((!(s[j]&s[k]))&&(!(s[k]&s[l]))&&(!(s[j]&s[l]))) f[1-low][j][k]=max(f[1-low][j][k],f[low][k][l]+val[j]); low=1-low; } if (n%2) low=1;else low=0; For (i,num) For (j,num) ans=max(ans,f[low][i][j]); printf("%d",ans); }
相关文章推荐
- NOI2001 炮兵阵地(状压dp)
- POJ 1185 NOI 2001 炮兵阵地 状压DP
- [NOI2001][POJ1185]炮兵阵地(状压dp)
- [NOI 2001] 炮兵阵地:状压DP
- NOI 2001 & poj 1185 && NYOJ 85 炮兵阵地(状压dp)
- (状压dp)NOI 2001(POJ 1185) 炮兵阵地
- [Poj1185][Noi2001]炮兵阵地(状压dp)
- [POJ 1185][codevs 1647][NOI 2001]炮兵阵地 状压DP
- POJ-1185-炮兵阵地(状压DP)
- POJ - 1185 炮兵阵地 (状压dp)
- [NOI 2001]炮兵阵地
- [POJ 1185]炮兵阵地(状压DP)
- XJOI #8T1 炮兵阵地 状压DP
- POJ 1185 炮兵阵地 (状压DP)
- 【NOI2001】炮兵阵地(状态压缩,动态规划)
- [COGS301] [NOI2001] 炮兵阵地
- POJ 1185 炮兵阵地 (状压DP)
- POJ1185:炮兵阵地(状压dp)
- poj1185:炮兵阵地(状压dp)
- poj185 炮兵阵地 状压DP