北大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 -------------------- ...
随机推荐
- C#如何设置窗体不能修改大小
找到FormBorderStyle设置为FixedDialog即可
- Mahout贝叶斯算法拓展篇3---分类无标签数据
代码測试环境:Hadoop2.4+Mahout1.0 前面博客:mahout贝叶斯算法开发思路(拓展篇)1和mahout贝叶斯算法开发思路(拓展篇)2 分析了Mahout中贝叶斯算法针对数值型数据的处 ...
- 【版本号公布】Jeecg-P3 1.0 公布,J2EE微服务框架(插件开发)
JEECG-P3 1.0 公布了! JEECG-P3 1.0是一个J2EE微服务框架(插件开发). 特点:业务组件以JAR方式提供,插件模式.松耦合.可插拔.支持独立部署,也能够无缝集成Jeecg平台 ...
- PCCs系数
package ai; public class pccs { public static void main(String[] args) { double same[][]=new double[ ...
- react 开发过程中的总结/归纳
1.点击元素,获取绑定该事件的父级元素,使用 e.currentTarget.e.target 获取的是,出发该事件的元素,该元素有可能是所绑定事件的元素的子元素. 2.使用 react router ...
- mac终端配置Android ADB命令
不得不说mac是一款开发利器,不仅可以开发ios,而且对于Android开发也是不错的选择,下面我就对mac配置adb命令,进行简要的说明.下面我将一下mac环境下的配置步骤:1.在自己的目录(hom ...
- 【uoj35】后缀排序
后缀数组模板题 #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio ...
- 关于The hierarchy of the type TestBeforeAdvice is inconsistent的问题
今天准备写一个spring aop的demo,创建了TestBeforeAdvice类,该类实现了MethodBeforeAdvice接口,eclipse报了"The hierarchy o ...
- YTU 2503: 大斐波那契数列
2503: 大斐波那契数列 时间限制: 1 Sec 内存限制: 200 MB 提交: 974 解决: 400 题目描述 斐波那契数列,又称黄金比例数列,指的是这样一个数列:0.1.1.2.3.5. ...
- windows 下操作目录(使用DOS命令)
Attrib 更改单个文件或目录的属性.该命令设置或删除指派给文件或目录的只读.系统.存档.隐藏以及压缩属性. 含有下列参数的 attrib 命令仅当使用故障恢复控制台时才可用.含有不同参数的 att ...