炮兵阵地
来源:互联网 发布:喀秋莎软件使用ppt 编辑:程序博客网 时间:2024/04/28 13:11
/* 炮兵阵地*//*这道题想了很长时间,终于AC了*/include <iostream>#include <cstring>#include <cstdio>using namespace std;int dp[109][100][100],state[190],map[109],num;void initdp(int n){ num = 0; for(int i=0;i<(1<<n);i++) if((!(i&(i<<1))&&!(i&(i<<2))))state[num++] = i;}int sum(int n){ int ans = 0; while(n) { if(n % 2 == 1) ans++; n/=2; } return ans;}int main(){ int T,n,m;char ch; //freopen("input.txt","r",stdin); scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(map,0,sizeof(map)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin >> ch; if(ch == 'H')map[i] = map[i]|(1<<j); } initdp(m); memset(dp,-1,sizeof(dp)); for(int i=0;i<num;i++) if(!(map[0]&state[i])) dp[0][i][0] = sum(state[i]); for(int i=1;i<n;i++) { for(int j=0;j<num;j++) { if(map[i]&state[j])continue; for(int k=0;k<num;k++) { if(state[k]&state[j])continue; for(int p=0;p<num;p++) { if(state[p]&state[j])continue; if(state[p]&state[k])continue; if(dp[i-1][k][p]==-1)continue; dp[i][j][k] = max(dp[i][j][k],dp[i-1][k][p]+sum(state[j])); } } } } int ans =0; if(n==0&&m==0){puts("0");continue;} for(int i=0;i<num;i++) for(int j=0;j<num;j++) ans = max(ans,dp[n-1][i][j]); printf("%d\n",ans); } return 0;}
0 0
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- 炮兵阵地
- pku1185炮兵阵地
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地
- 1185 炮兵阵地
- 炮兵阵地 POJ1185
- poj 1185炮兵阵地
- Android:实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- 什么是码元(以二进制位来参考)
- 2.4.3 模式匹配(Pattern matching)
- Jquery学习笔记
- Cloud foundry warden 源码学习(2)
- 炮兵阵地
- vector::clear
- MVC视图语法学习
- PAT 1070. Mooncake (25)
- spirng注解时的注意问题
- java面试题补充
- 基于 REST 的 Web 服务:基础
- 快速排序(Quicksort)
- 黑马程序员14——OC之Fundation(NSString)