链接: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的更多相关文章

  1. POJ 1020 Anniversary Cake(DFS)

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

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

                                                                                                         ...

  3. POJ1020 Anniversary Cake

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

  4. 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 ...

  5. DP Intro - poj 2342 Anniversary party

    今天开始做老师给的专辑,打开DP专辑 A题 Rebuilding Roads 直接不会了,发现是树形DP,百度了下了该题,看了老半天看不懂,想死的冲动都有了~~~~ 最后百度了下,树形DP入门,找到了 ...

  6. 【DFS】Anniversary Cake

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

  7. poj 2324 Anniversary party(树形DP)

    /*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...

  8. Anniversary Cake

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

  9. 【poj1020】 Anniversary Cake

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

  10. POJ 2342 - Anniversary party - [树形DP]

    题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...

随机推荐

  1. (linux)idr(integer ID management)机制

     最近研究进程间通信,遇到了idr相关的函数,为了扫清障碍,先研究了linux的idr机制. IDR(integer ID management)的要完成的任务是给要管理的对象分配一个唯一的ID,于 ...

  2. BZOJ2120 数颜色 —— 待修改莫队

    题目链接:https://vjudge.net/problem/HYSBZ-2120 2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit:  ...

  3. BestCoder Round #92 1002 Count the Sheep —— 枚举+技巧

    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1002 题解: 做题的时候只是想到 ...

  4. ffmpeg加文字水印并控制水印显示时间或显示周期

    #以下脚本保存成.sh文件运行,不会出现中文乱码问题 网上查到用enable关键字控制,实际是draw #加水印 水印位置由x,y,w,h来控制 #ffmpeg编译时需--enable-libfree ...

  5. CyclicBarrier及CountDownLatch的使用

    CountDownLatch位于java.util.concurrent包下,是JDK1.5的并发包下的新特性. 首先根据Oracle的官方文档看看CountDownLatch的定义: A synch ...

  6. WebRTC学习

    1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/web ...

  7. Java(一)——认识Java语言

    1.Java语言简介 Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,具有卓越的通用性.高效性.平台移植性和安全性.Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单 ...

  8. poi word 转html (.DOC .DOCX )

    注:不支持图片,支持表格 package com.bjhy.platform.report.commons; import java.io.BufferedWriter; import java.io ...

  9. Flexpaper二次开发入门教程》(十) Flexpaper简单使用-第一个Flexpaper例子

    4. Flexpaper简单使用 通过上面三章的内容,大家对Flexpaper.SWFTools应该有大概的了解了,SWF文件也已经生成了,我们开始进入Flexpaper的使用的介绍. 本章中只演示F ...

  10. hibernate Criteria中or和and的用法

    /s筛选去除无效数据 /*      detachedCriteria.add( Restrictions.or( Restrictions.like("chanpin", &qu ...