北大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 -------------------- ...
随机推荐
- Android自己主动提示文本框(AutoCompleteTextView)
自己主动提示文本框(AutoCompleteTextView)能够加强用户体验,缩短用户的输入时间(百度的搜索框就是这个效果). 首先.在xml中定义AutoCompleteTextView控件: a ...
- oracle initialization or shutdown in progress 问题解决
今天登录oracle时遇到oracle initialization or shutdown in progress 这个错误提示,在网上搜了下,试了非常多方法,最后结合几种方法结合,成功攻克了问题! ...
- 小工具:天气查询 Vs自定义设置 DevGridControl中GridView排序问题 小工具:火车票查询 小工具:邮件发送 小工具:截图&简单图像处理
小工具:天气查询 开发一个天气查询的工具主要由两步构成,一是数据的获取,二是数据的展示. 一.数据获取 数据获取又可以分为使用其它公司提供的API和手动抓取其它网站数据. 1. 某公司提供的AP ...
- Velocity高速新手教程
变量 (1)变量的定义: #set($name = "hello") 说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引號中的字面字符串将解析和又 ...
- SDUST 2844-Mineral Water(数学)
Mineral Water nid=24#time" title="C.C++.go.haskell.lua.pascal Time Limit1000ms Memory Limi ...
- Creo二次开发—内存处理
#include <ProDisplist.h> ProError ProDisplistInvalidate(ProMdl model) Invalidates the two- or ...
- ZOJ 3684 Destroy 树的中心
中心节点就是树的中心,2遍dfs求到树的直径.而中心一定在直径上,顺着直径找到中心就够了. 然后能够一遍树形DP找到最小值或者二分+推断是否訪问到叶子节点. #include <iostream ...
- hdu 5001 概率DP 图上的DP
http://acm.hdu.edu.cn/showproblem.php?pid=5001 当时一看是图上的就跪了 不敢写,也没退出来DP方程 感觉区域赛的题 一则有一个点难以想到 二则就是编码有 ...
- MySQL-导入与导出
CSV文件导入MySQL LOAD DATA INFILE语句允许您从文本文件读取数据,并将文件的数据快速导入数据库的表中. 导入文件操作之前,需要准备以下内容: 一.将要导入文件的数据对应的数据库表 ...
- 数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++)
数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2 ...