Hdu OJ 5113 Black And White (2014ACM/ICPC亚洲区北京站) (搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5113
题目大意:有k种颜色的方块,每种颜色有ai个, 现在有n*m的矩阵, 问这k种颜色的方块能否使任意两个相连的方块颜色不一样填满整个矩阵,如果可以输出任意一种。
解题思路:由于n,m在[1, 5]内, 所以直接暴力枚举; 需要注意的是:需要剪枝一下。
代码如下:
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll; const int N = ;
int n, m, k;
int a[N], mp[N][N];
bool is;
bool judge(int x, int y, int s)
{
bool p = true, q = true;
if(x - >= && mp[x-][y] == s)
p = false;
if(y - >= && mp[x][y-] == s)
q = false;
return p && q;
} void dfs(int x, int y, int cou)
{
int sum = , mx = ;
for(int i=; i<=k; ++ i)
{
sum += a[i];
if(a[i] > mx)
mx = a[i];
}
if(sum - mx < mx - )
return;
if(cou == n*m)
{
is = true;
return ;
} for(int i=; i<=k; ++ i)
{
if(a[i] && judge(x, y, i))
{
a[i] --;
mp[x][y] = i;
if(y == m)
dfs(x+, , cou + );
else
dfs(x, y+, cou + );
if(is)
return ;
a[i] ++;
}
}
} void solve(int cases)
{
scanf("%d%d%d", &n, &m, &k);
int sum = , mx = ;
for(int i=; i<=k; ++ i)
{
scanf("%d", &a[i]);
sum += a[i];
if(a[i] > mx)
mx = a[i];
}
printf("Case #%d:\n", cases);
if(sum - mx < mx - )
printf("NO\n");
else
{
printf("YES\n");
memset(mp, -, sizeof(mp));
is = false;
dfs(, , );
for(int i=; i<=n; ++ i)
for(int j=; j<=m; ++ j)
printf(j == m? "%d\n" : "%d ", mp[i][j]);
}
} int main()
{
int t;
scanf("%d", &t);
for(int i = ; i <= t; ++ i)
{
solve(i);
}
return ;
}
Hdu OJ 5113 Black And White (2014ACM/ICPC亚洲区北京站) (搜索)的更多相关文章
- 2014ACM/ICPC亚洲区北京站题解
本题解不包括个人觉得太水的题(J题本人偷懒没做). 个人觉得这场其实HDU-5116要比HDU-5118难,不过赛场情况似乎不是这样.怀疑是因为老司机带错了路. 这套题,个人感觉动态规划和数论是两个主 ...
- Hdu OJ 5115 Dire Wolf (2014ACM/ICPC亚洲区北京站) (动态规划-区间dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题目大意:前面有n头狼并列排成一排, 每一头狼都有两个属性--基础攻击力和buff加成, 每一头 ...
- HDU 5112 A Curious Matt (2014ACM/ICPC亚洲区北京站-重现赛)
A Curious Matt Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) ...
- hdu 5122(2014ACM/ICPC亚洲区北京站) K题 K.Bro Sorting
传送门 对于错想成lis的解法,提供一组反例 1 3 4 2 5同时对于这次案例也可以观察出解法:对于每一个数,如果存在比它小的数在它后面,它势必需要移动,因为只能小的数无法向右移动,而且每一次移动都 ...
- HDU 5115 (2014ACM/ICPC亚洲区北京站) D题(Dire Wolf)
题目传送门 设dp[i][j]为杀掉区间i到j之间的狼需要付出的最小代价,那么dp[i][j]=min{dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1]} Java代码 ...
- 2014ACM/ICPC亚洲区北京站 上交命题
A http://acm.hdu.edu.cn/showproblem.php?pid=5112 输入n个时刻和位置,问那两个时刻间速度最快. 解法:按照时间排序,然后依次求相邻两个之间的速度,速度= ...
- 2014ACM/ICPC亚洲区北京站
1001 A Curious Matt 求一段时间内的速度单位时间变化量,其实就是直接求出单位时间内的,如果某段时间能达到最大那么这段时间内必定有一个或一小段单位时间内速度变化是最大的即局部能达到最 ...
- HDU 5127.Dogs' Candies-STL(vector)神奇的题,set过不了 (2014ACM/ICPC亚洲区广州站-重现赛(感谢华工和北大))
周六周末组队训练赛. Dogs' Candies Time Limit: 30000/30000 MS (Java/Others) Memory Limit: 512000/512000 K ( ...
- HDU 5135.Little Zu Chongzhi's Triangles-字符串 (2014ACM/ICPC亚洲区广州站-重现赛)
Little Zu Chongzhi's Triangles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/512000 ...
随机推荐
- lua的栈
lua的栈是从栈底到栈顶: lua_pushstring(L, "test1");lua_pushstring(L, "test2");lua_pushstri ...
- tomcat配置及优化
jdk安装 su - root mkdir jdk cd jdk wget https://mirror.its.sfu.ca/mirror/CentOS-Third-Party/NSG/common ...
- .NET EXCEL NPOI 图片
今天闲来无事写了下 “ .NET 用 NPOI 组件 将 图片文件 写到 EXCEL 中 ” 先看效果: 头是我加的,这个应该不是难事! 再看代码: private void button1_C ...
- jQuery:获取浏览器中的分辨率
JQuery: <script type="text/javascript"> $(document).ready(function(){ alert($(window ...
- windows server 2008服务器 做raid0
dell服务器,启动后,根据提示按F10进入raid设置,设置成raid0 我们的服务器是4块硬盘,每块600G,做raid0时,生成一个虚拟磁盘vdisk. 做完raid之后,做OS部署 重启服务器 ...
- reorderList使用
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> ...
- nodejs-express 报错View is not a constructor
可能是express版本问题 view修改为views – app.set('views',__dirname + '/views');
- ThinkPHP5.0完全开发手册
http://www.kancloud.cn/manual/thinkphp5/118006 www WEB部署目录(或者子目录) ├─composer.json composer定 ...
- 最牛B的编码套路
最近,我大量阅读了Steve Yegge的文章.其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已: 与你所相信的恰恰相反,单纯地每天埋头 ...
- winform画图闪烁问题
问题:在winform程序的onpaint方法中画图, 连续画, 如鼠标移动时就要不断画图, 会闪烁. 解决方法:将要画图的部分放到一个自定义控件中, 自定义控件的onpaint方法里面画图, 然后再 ...