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)的更多相关文章

  1. POJ1020 Anniversary Cake

    题目来源:http://poj.org/problem?id=1020 题目大意:有一块边长为s的正方形大蛋糕,有n个客人,每个客人想分一块边长为si的正方形蛋糕.求这块大蛋糕能否恰好满足所有客人的需 ...

  2. 【DFS】Anniversary Cake

    [poj1020]Anniversary Cake Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17203   Accep ...

  3. 北大ACM - POJ试题分类(转自EXP)

    北大ACM - POJ试题分类 -- By EXP 2017-12-03 转载请注明出处: by EXP http://exp-blog.com/2018/06/28/pid-38/ 相关推荐文: 旧 ...

  4. POJ 1020 Anniversary Cake(DFS)

    Anniversary Cake Time Limit: 1000MSMemory Limit: 10000KB64bit IO Format: %I64d & %I64u Submit St ...

  5. poj 1020 Anniversary Cake(切正方形蛋糕+搜索)

                                                                                                         ...

  6. 北大 ACM 分类 汇总

    1.搜索 //回溯 2.DP(动态规划) 3.贪心 北大ACM题分类2009-01-27 1 4.图论 //Dijkstra.最小生成树.网络流 5.数论 //解模线性方程 6.计算几何 //凸壳.同 ...

  7. Anniversary Cake

    Anniversary Cake Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15704   Accepted: 5123 ...

  8. 【poj1020】 Anniversary Cake

    http://poj.org/problem?id=1020 (题目链接) 题意 有一个S*S的大蛋糕,还有许多正方形的小蛋糕,问能否将大蛋糕完整的分成所有的小蛋糕,不能有剩余. Solution 像 ...

  9. 北大ACM题库习题分类与简介(转载)

    在百度文库上找到的,不知是哪位大牛整理的,真的很不错! zz题 目分类 Posted by fishhead at 2007-01-13 12:44:58.0 -------------------- ...

随机推荐

  1. Centos7最小安装下Install Clamav(2017-06-09最后更新)

    If you are installing ClamAV for the first time, you have to add a new user and group to your system ...

  2. Swift 函数Count,Filter,Map,Reduce

    原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 前言:和OC不同,Swift有非常多全局的函数,这些全局函数对简化代码来说非常实用.眼下Swift出到了2.0,只是我这篇 ...

  3. iOS 基于 MVC 的项目重构总结

    关于MVC的争论 关于MVC的争论已经有非常多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你觉得的MVC的问题,一定是你自己理解的问题(资深架构师请自己主动忽略本文) ...

  4. 【iOS开发-74】解决方式:Xcode6下利用preference保存数据,终于的plist文件在哪里?

    (1)现象:普通情况下.储存数据以一个沙盒为单位,preference数据存在在沙盒路径下Library/Preferences里面,可是Xcode6里找来找去根本什么都没有. watermark/2 ...

  5. 如何理解scrapy Selector

    1 scrapy Selector是什么 Selector对象本质上是对DOM tree的子树的抽象,这种抽象的目的是用于定位我们感兴趣的node.比如某次http response是一棵完整的DOM ...

  6. update-java-alternatives 更改默认Java环境

    Ubuntu/debian 更改默认Java环境 我的电脑里安装了两个版本的Java,一个是java-6-sun,还有一个是java-gcjgcj是在JVM非常缓慢的时候诞生的,他可以把Java代码编 ...

  7. tomcat调优配置

    今天遇到一个tomcat服务注册后配置Java参数没效果,最后在注册表中删除原来的tomcat服务后,顺便看了一下tomcat的调优配置,看别人总结的不错,就转载一下. Tomcat.Jetty.Gl ...

  8. 论如何O(1)快速乘

    然而并没有什么好论的... 直接贴代码算了... ll Mul(ll x,ll y,ll Mod){ x=(x%Mod+Mod)%Mod;y=(y%Mod+Mod)%Mod; return (x*y- ...

  9. MySQL基础 — 常用命令

    一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MySQ: 首先在打开cmd窗口,输入mysql -uroot -p ,然后空格进入MySQL控制台, ...

  10. 10.19NOIP模拟赛(DAY2)

    /* 正解O(n)尺取法orz 我写的二分答案.本来以为会被卡成暴力分...... 这个-'0'-48是我写的吗........我怎么不记得... */ #include<bits\stdc++ ...