博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1185 炮兵阵地 状压dp
阅读量:5278 次
发布时间:2019-06-14

本文共 1833 字,大约阅读时间需要 6 分钟。

经典题目不必多说,直接贴代码。

1 #include
2 #include
3 #include
4 using namespace std; 5 6 int n, m, cnt, size; 7 int a[110], st[70], ct[70]; 8 char str[15]; 9 int f[110][70][70];10 void init()11 {12 size = 0;13 int maxn = 1 << m;14 for (int i = 0; i < maxn; i++){15 if (!(i&(i<<2)) && !(i&(i<<1))){16 st[size] = i;17 ct[size] = 0;18 int tmp = i;19 while(tmp) tmp = tmp&(tmp-1), ct[size]++;20 size++;21 }22 }23 }24 int main()25 {26 scanf("%d %d", &n, &m);27 for (int i = 1; i <= n; i++){28 scanf("%s", str);29 a[i] = 0;30 for (int j = 0; j < m; j++){31 if (str[j] == 'H') a[i] |= 1 << j;32 }33 }34 init();35 memset(f, 0, sizeof(f));36 for (int j = 0; j < size; j++){37 if (!(a[1]&st[j])) f[1][j][0] = ct[j];38 }39 for (int i = 2; i <= n; i++){40 for (int j = 0; j < size; j++){41 if (a[i]&st[j]) continue;42 for (int k = 0; k < size; k++){43 if (a[i-1]&st[k]) continue;44 if (i == 2){45 if (!(st[j]&st[k]))46 f[i][j][k] = max(f[i][j][k], f[i-1][k][0] + ct[j]);47 }48 else for (int l = 0; l < size; l++){49 if (!(a[i-2]&st[l]) && !(st[j]&st[k]) && !(st[j]&st[l]) && !(st[k]&st[l]))50 f[i][j][k] = max(f[i][j][k], f[i-1][k][l] + ct[j]);51 }52 }53 }54 }55 int ans = 0;56 for (int j = 0; j < size; j++)57 for (int k = 0; k < size; k++)58 ans = max(ans, f[n][j][k]);59 printf("%d\n", ans);60 return 0;61 }

 

转载于:https://www.cnblogs.com/james47/p/3900231.html

你可能感兴趣的文章
MySQL数据备份之mysqldump使用
查看>>
Jsoncpp学习二---读取Json格式的文本文件
查看>>
java推送数据到app--极光推送
查看>>
C#面试分享:单例模式
查看>>
hdu 2199 Can you solve this equation?
查看>>
P1083 借教室
查看>>
(四)工厂方法模式详解(另附简单工厂的死亡之路)
查看>>
ASP.NET MVC 3.0学习系列文章--序
查看>>
Daemontools和Supervisor管理linux常驻进程
查看>>
双显示屏下主显示屏任务栏不见了
查看>>
学Java的第30天 异常
查看>>
docker修改国内官方镜像
查看>>
如何验证二维数组
查看>>
Java中系统属性Properties介绍 System.getProperty()参数大全
查看>>
dom get selector
查看>>
11 | 怎么给字符串字段加索引?
查看>>
微信支付之前的统一下单
查看>>
jmap查看内存使用情况与生成heapdump
查看>>
软件测试(三)—— 参数化测试用例(Nextday.java)
查看>>
go学习笔记-流程控制(if/else,for/range)
查看>>