北大ACM(POJ1020-Anniversary Cake)
Question:http://poj.org/problem?id=1020
问题点:DFS。
Memory: 260K Time: 47MS
Language: C++ Result: Accepted #include <iostream>
using namespace std; int mat[];//按列记录小块Cake填充状态
int side[];//小块Cake边长
bool visit[];//小块Cake是否已使用
int width,cnt;//大块Cake边长 小块Cake数量
bool flag;//是否能被填充标志
int cmp(const void* a,const void* b)
{
return *(int*)b - *(int*)a;//降序排列
}
//状态更新: pn为1时,从x列开始填充第idx块Cake,并判断是否能填充进去
// pn为-1时,从x列开始清除第idx块Cake
bool update(int idx,int x,int pn)
{
int i,temp = mat[x];
if(pn == )
{
//填充第idx块Cake后,长宽不能超过边界
if(side[idx] + x > width || mat[x] + side[idx] > width) return false;
//判断x列到x+side[idx]-1列 是否同高度
for(i=;i<side[idx];i++)
{
if(temp != mat[x+i]) return false;
}
visit[idx] = true;
}
else
{
visit[idx] = false;
}
for(i=;i<side[idx];i++)
{
mat[x+i] += side[idx]*pn;
}
return true;
}
//获取当前最小高度处的最小列,填充顺序为"从低到高,从左到右"
int getLowX()
{
int i,temp=;
for(i=;i<width;i++)
{
temp =(temp<mat[i]?temp:mat[i]);
}
for(i=;i<width && temp!= mat[i];i++);
return i;
}
//idx为已填充数 ,x为小块Cake编号
void dfs(int idx,int x)
{
if(idx == cnt) {//当全部填充完毕时,返回true
flag = true;
return;
}
for(int i=,w=;i<cnt;i++)
{
if(visit[i]) continue;//已填充的不再填充
if(w == side[i]) continue; else w = side[i];//同边长的不重复填充
if(update(i,x,))//在x列填充第i块Cake
{
dfs(idx+,getLowX());
if(flag) return;
update(i,x,-);//在x列清除第i块Cake
}
}
}
int main()
{
int eg;
cin>>eg;
while(eg--)
{
int i,j,k;
memset(mat,,sizeof(mat));
memset(side,,sizeof(side));
memset(visit,,sizeof(visit));
flag = false;
cin>>width;
cin>>cnt;
for(i=;i<cnt;i++)
{
cin>>side[i];
}
qsort(side,cnt,sizeof(int),cmp);//排序用于去重
dfs(,);
if(flag) cout<<"KHOOOOB!"<<endl;
else cout<<"HUTUTU!"<<endl;
}
//system("pause");
return ;
}
北大ACM(POJ1020-Anniversary Cake)的更多相关文章
- POJ1020 Anniversary Cake
题目来源:http://poj.org/problem?id=1020 题目大意:有一块边长为s的正方形大蛋糕,有n个客人,每个客人想分一块边长为si的正方形蛋糕.求这块大蛋糕能否恰好满足所有客人的需 ...
- 【DFS】Anniversary Cake
[poj1020]Anniversary Cake Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17203 Accep ...
- 北大ACM - POJ试题分类(转自EXP)
北大ACM - POJ试题分类 -- By EXP 2017-12-03 转载请注明出处: by EXP http://exp-blog.com/2018/06/28/pid-38/ 相关推荐文: 旧 ...
- POJ 1020 Anniversary Cake(DFS)
Anniversary Cake Time Limit: 1000MSMemory Limit: 10000KB64bit IO Format: %I64d & %I64u Submit St ...
- poj 1020 Anniversary Cake(切正方形蛋糕+搜索)
...
- 北大 ACM 分类 汇总
1.搜索 //回溯 2.DP(动态规划) 3.贪心 北大ACM题分类2009-01-27 1 4.图论 //Dijkstra.最小生成树.网络流 5.数论 //解模线性方程 6.计算几何 //凸壳.同 ...
- Anniversary Cake
Anniversary Cake Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15704 Accepted: 5123 ...
- 【poj1020】 Anniversary Cake
http://poj.org/problem?id=1020 (题目链接) 题意 有一个S*S的大蛋糕,还有许多正方形的小蛋糕,问能否将大蛋糕完整的分成所有的小蛋糕,不能有剩余. Solution 像 ...
- 北大ACM题库习题分类与简介(转载)
在百度文库上找到的,不知是哪位大牛整理的,真的很不错! zz题 目分类 Posted by fishhead at 2007-01-13 12:44:58.0 -------------------- ...
随机推荐
- go-import下划线的作用
原文:http://studygolang.com/articles/4356 ------------------------------------------------------------ ...
- 【DataStructure】Charming usage of Set in the java
In an attempt to remove duplicate elements from list, I go to the lengths to take advantage of meth ...
- 连通分量模板:tarjan: 求割点 && 桥 && 缩点 && 强连通分量 && 双连通分量 && LCA(近期公共祖先)
PS:摘自一不知名的来自大神. 1.割点:若删掉某点后.原连通图分裂为多个子图.则称该点为割点. 2.割点集合:在一个无向连通图中,假设有一个顶点集合,删除这个顶点集合,以及这个集合中全部顶点相关联的 ...
- 使用qemu
1 获取qemu启动linux kernel的log qemu-system-x86_64 -nographic -kernel xxx -initrd xxx -append "conso ...
- CSP 201612-3 权限查询 【模拟+STL】
201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权 ...
- YTU 2504: 蚂蚁感冒
2504: 蚂蚁感冒 时间限制: 1 Sec 内存限制: 128 MB 提交: 273 解决: 118 题目描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右.每只蚂蚁都只能沿 ...
- openstack horizon 学习(2) navigation、dashboard、panels
本章的主要内容是如何用horizon的navigation结构添加一个应用的面板. Horizon中提供了两种为应用添加panel的方法,一种是通过Pluggable Settings的方式,另一种是 ...
- loj 6034 线段游戏
题目大意: 给出若干条线段,用 (x1,y2),(x2,y2) 表示其两端点坐标,现在要求支持两种操作: 0 x1 y1 x2 y2 表示加入一条新的线段 (x1,y2),(x2,y2) 1 x0 询 ...
- 提交图片base64格式问题
提交图片base64格式给后台,一定把data:image/png;base64,去掉,不然提交后后台返回的图片URL打开是一个破坏的图片.使用split("base64,")[1 ...
- Windows Java环境变量配置
安装步骤略过... 环境变量配置 新建环境变量: JAVA_HOME C:\Program Files\Java\jdk1.6 将路径替换为自己的安装路径. 新建环境变量: classpath ...