poj1020
来源:互联网 发布:中国域名总数 编辑:程序博客网 时间:2024/06/16 10:14
#include<iostream>
using namespace std;
int b[41],c[11],s,n;
bool flag;
//这个题目很巧妙,问题是能否刚好切完,现在反向思考,能否填满
//这个搜索想的好,从上到下,从左到右,也就是每次找最可能填的地方,有点贪心的意思
//
void dfs(int a)
{
int pos,i,j,lit=41;
bool f;
if(a==n)//搜索完毕
{
flag=true;
return;
}
for(i=1,lit=41;i<=s;i++)//找到最可能填的位置
{
if(lit>b[i])
{
lit=b[i];
pos=i;
}
}
for(i=10;i>=1;i--)
{
if(c[i]>0&&lit+i-1<=s&&pos+i-1<=s)//能不能放得下
{
for(j=pos,f=true;j<=pos+i-1;j++)//宽度够不够
{
if(b[j]>lit)
{
f=false;
break;
}
}
if(f)
{
for(j=pos;j<=pos+i-1;j++)//够了
b[j]+=i;
c[i]--;
dfs(a+1);
c[i]++;
for(j=pos;j<=pos+i-1;j++)//不够
b[j]-=i;
}
}
}
}
int main()
{
int t,i,sum,a;
scanf("%d",&t);
while(t--)
{
sum=0;
scanf("%d%d",&s,&n);
memset(c,0,sizeof(c));
for(i=1;i<=40;i++)
b[i]=1;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
sum+=a*a;
c[a]++;
}
if(sum!=s*s)
flag=false;
else
{
flag=false;
dfs(0);
}
if(flag)
printf("KHOOOOB!/n");
else
printf("HUTUTU!/n");
}
return 0;
}
- poj1020
- poj1020
- poj1020
- poj1020--DFS
- poj1020 搜索
- poj1020 dfs
- poj1020--Anniversary Cake题解
- poj1020 cake解题报告
- poj1020 Anniversary Cake 搜索
- OJ-POJ1020-DFS
- POJ1020 分蛋糕
- poj1020 暴搜暴的很有水平~
- poj1020分蛋糕(用一堆小正方形拼成一个大正方形)
- poj1020(非常经典的dfs,易理解,难写代码)
- 利用JQuery中的getJSON将文本文档中JSON串数据传到网页上
- HTML学习 NO6
- 一个项目涉及到的50个Sql语句
- 从靳雄飞的疑问想到某校园网项目的问题
- [Reprinted] antelope color living museum - creative furniture, laptop computer desk, home daily
- poj1020
- 详细解说 STL 排序(Sort)
- windowsCE异常和中断服务程序初探(=)
- ClearQuest+ClearCase+Jazz+RTC宣讲会后的一些个人记录
- Spring 管理Struts2 Action
- session过期设置
- C# 操作word(转)
- Gridview,DataList,Repeater分别在什么情况下使用。
- ://解决CppWebBrowse的TextArea组件不能获取回车符的问题