[swustoj 183] 种树
种树(0183)
问题描述
Aconly有一块矩形的地,因为这块地里有很多石头,耕作很不方便,所以他打算在这块地上种一些果树。这块地用一个只含‘#’和‘*’的N*M的矩阵来表示,‘#’表示泥土,‘*’表示石头。当然有石头的地方是不能种树的,而且任意两棵树之间不能离得太近,表现在矩阵中就是不能上、下、左、右、左上、右上、左下、右下八个方向相邻。你的任务就是帮助Aconly算出这块地最多可以种多少棵树。
输入
有多组测试数据。每组测试数据以两个整数N和M开头,随后有N行只含‘#’和‘*’的字符,每行M个。 (1<=N<=100, 1<=M<=10)当M=N=0时表示输入结束。
输出
每组数据输出一个整数,表示Aconly最多可以在这块地里种多少棵树。每组输出数据占一行。
样例输入
5 4
####
**#*
##*#
####
##*#
0 0
样例输出
6
简单状压DP、代码还可以继续优化
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
#define ll long long
#define int2 unsigned int
#define MOD (1<<32)
#define INF 0x3f3f3f3f
#define N 1024 int n,m;
int a[N];
int dp[N][N]; //dp[i][j]表示第i行状态为j时的最大种树棵数
char mpt[N][N]; bool judge(int row,int sta)
{
if((a[row]&sta)!=sta) return ;
if(sta&(sta<<)) return ;
return ;
}
bool judge2(int r1,int r2)
{
if(r1&r2) return ;
if((r1<<)&r2 || (r1>>)&r2) return ;
return ;
}
int cal1(int n)
{
int ret=;
while(n){
ret+=n%;
n>>=;
}
return ret;
}
void solve()
{
int i,j,k;
int MAX=<<m;
dp[][]=;
for(i=;i<=n;i++){
for(j=;j<MAX;j++){
if(!judge(i,j)) continue;
for(k=;k<MAX;k++){
if(!judge2(j,k)) continue;
dp[i][j]=max(dp[i][j],dp[i-][k]+cal1(j));
}
}
}
int ans=;
for(i=n,j=;j<MAX;j++) ans=max(ans,dp[i][j]);
printf("%d\n",ans);
}
int main()
{
while(scanf("%d%d",&n,&m),n||m)
{
memset(a,,sizeof(a));
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
char ch;
scanf(" %c",&ch);
if(ch=='#') a[i]=(a[i]<<)+;
else a[i]=(a[i]<<);
}
}
solve();
}
return ;
}
[swustoj 183] 种树的更多相关文章
- [Data Structure] 数据结构中各种树
数据结构中有很多树的结构,其中包括二叉树.二叉搜索树.2-3树.红黑树等等.本文中对数据结构中常见的几种树的概念和用途进行了汇总,不求严格精准,但求简单易懂. 1. 二叉树 二叉树是数据结构中一种重要 ...
- 种树 (codevs 1653) 题解
[问题描述] 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号为1..n.每个块大小为一个单位尺寸并最多可种一棵树.每个居民想在门前种些树并指定了三个号码b,e ...
- 【Todo】字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树
另开一文分析字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树. 先来一个汇总, 算法: 本文中提到的字符串匹配算法有:KMP, BM, Horspool, Sunday, BF, ...
- SGU 183. Painting the balls( dp )
dp..dp(i, j)表示画两个点为i-j, i的最优答案. dp(i, j) = min{ dp(i-j, k) } + cost[i] (1≤k≤M-j) 令f(i, j) = min{dp(i ...
- 开源企业IM-免费企业即时通讯-ENTBOOST V2014.183 Windows版本号正式宣布
ENTBOOST,VERSION 2014.183 Windows(点击下载)版本号公布.主要添加PC端P2P(点对点)文件传输功能:公布安卓Android手机clientAPP 1.0版本号.公布苹 ...
- bzoj2151 种树 双向链表+堆
2151: 种树 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1151 Solved: 613[Submit][Status][Discuss] ...
- 【bzoj2151】种树
Time Limit: 1000ms Memory Limit: 128MB Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府 ...
- BZOJ_2151_种树_贪心+堆+链表
BZOJ_2151_种树_贪心+堆 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编 ...
- P1250 种树
P1250 种树 题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定 ...
随机推荐
- (转载)SQLServer存储过程返回值总结
1. 存储过程没有返回值的情况(即存储过程语句中没有return之类的语句) 用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况 (1)假如通过查询 ...
- Virtual Box中 CentOS双网卡设置
Virtual Box中 CentOS双网卡设置: 在Virtual Box中安装CentOS x86-64 6.4(final),配置了双网卡,eth0 为桥接模式 , eth1为内网模式 ...
- Beaglebone Back学习三(开发环境搭建)
开发环境搭建 1 Ubuntu环境搭建 2 Window环境搭建 3 开发板环境搭建 1 Ubuntu环境搭建 (1)安装必要的网络工具 samba nfs tftp vmware-tools sam ...
- NULL, NUL, EOF, '\0',0区别
NULL: 定义为0或0L或(void *)0,用于指示一个指针值是空,即什么都不指:'\0': 用且只用字符串结束符;NUL : 0x00,0值字符,可以用于结束ASCII字符串,和'\0'类似,但 ...
- wpf 绑定失效的原因及解决方案
有时候,您会发现在程序开始时还能正常运行的绑定失效了.就个人经验而言,绑定的失效主要分为两种情况:对于One-way绑定而言,如果软件开发人员绕过绑定直接更改了目标属性,那么绑定将会失效.而对于Two ...
- Arcgis 10.1中空间连接功能
空间链接的作用:将面上的所有点的值加起来取平均值.赋值给面属性.(我们可以定义右击——定义合并规则 连接要素的字段映射参数中指定的合并规则仅适用于连接要素中的属性,且仅适用于多个要素与目标要素匹配 ( ...
- gridView AspNetPager 翻页时 弹出窗体关闭报错
gridView AspNetPager 翻页后,你右击刷新或F5会发现弹出一个刷新页面. 这是因为默认翻页都是用dopostback方式回发的.因为这时的页面已经不是原来的页面.所以会弹出提示. 这 ...
- 线形,柱形,条形数据表(百度Echart插件)
[获取资源]进入官网, http://echarts.baidu.com/导航,下载,下拉框下载,常用303k.就是这么简单,就个一个js.[项目使用]新建项目,MyChart具体使用的过程中, ...
- 滤镜简单demo(转,供参考)
NSURL *iamgeUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"default" ...
- NOSQL Mongo入门学习笔记 - MongoDB的安装(一)
手上的工作不是很忙,所以来学习学习很久就像接触的MongoDb,无奈前段时间工作时间都比较多.记录在这里供以后参考 环境: Centos 7 64位 开始: 1. 在官网下载Mongo : wget ...