POJ-1020-Anniversary Cake
链接:https://vjudge.net/problem/POJ-1020
题意:
给一个宽为s的正方形,再给n个变长为an的小正方形,
判断是否能将这n个小正方形完全填充到这个大正方形里面。
思路:
首先判断总面积是否相等。
用一维数组记录每一列用了多少的高度。
每次选择剩余高度最长的 ,再找出对应的长度。
从大往小的选择正方形往里填充。
如果刚好填充完,则满足。
代码:
#include <iostream>
#include <memory.h>
#include <vector>
#include <map>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <queue>
#include <string> using namespace std; typedef long long LL; const int MAXN = 60; int square[MAXN];
int col[MAXN];
int n, m; bool DFS(int num)
{
if (num == n)
return true;
int minVal = m;
int minOrd = 0;
for (int i = 1;i <= m;i++)
{
//填充最小的列
if (col[i] < minVal)
{
minVal = col[i];
minOrd = i;
}
}
int minNum = 0;
for (int i = minOrd;i <= m;i++)
{
//得到填充最小的列的行数
if (col[i] == minVal)
minNum++;
else
break;
}
//从10往1填
for (int i = 10;i >= 1;i--)
{
if (square[i] <= 0)
continue;
if (i <= m - col[minOrd] && i <= minNum)
{
square[i]--;
for (int j = minOrd;j < minOrd + i;j++)
col[j] += i;
if (DFS(num + 1))
return true;
for (int j = minOrd;j < minOrd + i;j++)
col[j] -= i;
square[i]++;
}
}
return false;
} int main()
{
int t;
int wid;
scanf("%d", &t);
while (t--)
{
int sum = 0;
memset(square, 0, sizeof(square));
memset(col, 0, sizeof(col));
scanf("%d%d", &m, &n);
for (int i = 1;i <= n;i++)
{
cin >> wid;
square[wid]++;
sum += wid * wid;
}
if (sum != m * m)
{
cout << "HUTUTU!" << endl;
continue;
}
if (DFS(0))
cout << "KHOOOOB!" << endl;
else
cout << "HUTUTU!" << endl;
} return 0;
}
POJ-1020-Anniversary Cake的更多相关文章
- POJ 1020 Anniversary Cake(DFS)
Anniversary Cake Time Limit: 1000MSMemory Limit: 10000KB64bit IO Format: %I64d & %I64u Submit St ...
- poj 1020 Anniversary Cake(切正方形蛋糕+搜索)
...
- POJ1020 Anniversary Cake
题目来源:http://poj.org/problem?id=1020 题目大意:有一块边长为s的正方形大蛋糕,有n个客人,每个客人想分一块边长为si的正方形蛋糕.求这块大蛋糕能否恰好满足所有客人的需 ...
- POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划)
POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划) Descri ...
- DP Intro - poj 2342 Anniversary party
今天开始做老师给的专辑,打开DP专辑 A题 Rebuilding Roads 直接不会了,发现是树形DP,百度了下了该题,看了老半天看不懂,想死的冲动都有了~~~~ 最后百度了下,树形DP入门,找到了 ...
- 【DFS】Anniversary Cake
[poj1020]Anniversary Cake Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17203 Accep ...
- poj 2324 Anniversary party(树形DP)
/*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...
- 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 像 ...
- POJ 2342 - Anniversary party - [树形DP]
题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...
随机推荐
- Appnium安装-Mac平台
Appium的安装-MAC平台 其实Appium的安装方式主要有两种: 1)自己安装配置nodejs的环境,然后通过npm进行appium的安装 2)直接下载官网提供的dmg进行安装,dmg里面已 ...
- Windows程序设计(1)——Win32运行原理(三)
进程控制 1 获得系统进程 2 终止当前进程 3 终止其他进程 4 进程控制 4.1 获得系统进程 使用toolhelp模块可以实现获取系统中当前运行当中的进程列表. 思路如下,使用CreateToo ...
- MySQL学习笔记(一)——数据库基础
自己上大学时也学习过数据库,做开发时也用到过,但是做界面开发对于数据库的使用相对来说是比较简单的,大学时系统学习的数据库也还给老师了,在测试工作中也只是用到了一些基础sql,增删改查这一类的,但是自己 ...
- BZOJ 2023 [Usaco2005 Nov]Ant Counting 数蚂蚁:dp【前缀和优化】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2023 题意: 有n个家族,共m只蚂蚁(n <= 1000, m <= 1000 ...
- struts2 小例子(教训篇)
学了一阵子的struts2了,到了最后,想自己写个小程序,发现最简单的配置文件都 竟然能弄错,是我这几天睡眠不足么.怎么可能,爱好这门的,怎么会这样.这样真的很伤心啊.小小心灵受不了这种打击啊.... ...
- 自定义带图标input样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python 基础之第十二天(re正则,socket模块)
In [14]: 'hello-wold.tar.gz'.split('.') Out[14]: ['hello-wold', 'tar', 'gz'] In [15]: import re In [ ...
- BZOJ_3680_吊打XXX_模拟退火
BZOJ_3680_吊打XXX_模拟退火 Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将 n个g ...
- Update 出现在的问题
报错提示:之前的操作没有完成,运行deanup被打断,请先执行Cleanup方法. 正常右键点击Cleanup,如果只让默认值勾选,可能还是会报这个错.所以正确操作如下: 全部选中再点击OK,这样就可 ...
- atexit函数详解
对C语言有所了解的人都知道main函数是整个程序的入口,但是其实不然,在内核中可以使用链接器来设置程序的开始地方.当内核使⽤⼀个exec函数执⾏C程序时,在调⽤main函数之前先调⽤⼀个特殊的启动例程 ...