UVALive 4025 Color Squares(BFS)
题目链接:UVALive 4025 Color Squares
按题意要求放带有颜色的块,求达到w分的最少步数。
//yy:哇,看别人存下整个棋盘的状态来做,我什么都不想说了,不知道下午自己写了些什么东西,训练结束补的、、
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define CLR(a, b) memset((a),(b),sizeof((a)))
using namespace std;
const int inf = 0x3f3f3f3f;
int dp[][][][];
bool vis[][][][][][][][][];//整个棋盘
int dx[] = {,,-,};
int dy[] = {,,,-};
struct node {
int w;
int c[], g[][];
node(int _w = ):w(_w){CLR(c, ); CLR(g, );}
}t,p;
bool jud(node p) {
if(!vis[p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]])
return true, vis[p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]][p.g[][]] = ;
return false;
}
void bfs() {
int i, j, k, o, x, y;
queue<node> q;
q.push(node());
vis[][][][][][][][][] = ;
while(!q.empty()) {
t = q.front(); q.pop();
dp[t.c[]][t.c[]][t.c[]][t.c[]]=min(t.w,dp[t.c[]][t.c[]][t.c[]][t.c[]]);
for(i = ; i < ; ++i) {
for(j = ; j < ; ++j) {
int b=,r=,g=;
for(k = ; k < ; ++k) {
x = i + dx[k];
y = j + dy[k];
if(x >= && y >= && x < && y < ) {
if(t.g[x][y]==) b++;
else if(t.g[x][y]==) r++;
else if(t.g[x][y]==) g++;
}
}
int cc = t.g[i][j];
p.w = t.w + ;
if(cc != ) {//蓝
for(k = ; k < ; ++k) p.c[k] = t.c[k];
for(k = ; k < ; ++k)for(o = ; o < ; ++o) p.g[k][o] = t.g[k][o];
p.c[cc] = t.c[cc] - ;
p.c[] = t.c[] + ;
p.g[i][j] = ;
if(jud(p)) q.push(p);
}
if(cc != && b) {//红
for(k = ; k < ; ++k) p.c[k] = t.c[k];
for(k = ; k < ; ++k)for(o = ; o < ; ++o) p.g[k][o] = t.g[k][o];
p.c[cc] = t.c[cc] - ;
p.c[] = t.c[] + ;
p.g[i][j] = ;
if(jud(p)) q.push(p);
}
if(cc != && b && r) {//绿
for(k = ; k < ; ++k) p.c[k] = t.c[k];
for(k = ; k < ; ++k)for(o = ; o < ; ++o) p.g[k][o] = t.g[k][o];
p.c[cc] = t.c[cc] - ;
p.c[] = t.c[] + ;
p.g[i][j] = ;
if(jud(p)) q.push(p);
}
if(cc != && b && r && g) {//黄
for(k = ; k < ; ++k) p.c[k] = t.c[k];
for(k = ; k < ; ++k)for(o = ; o < ; ++o) p.g[k][o] = t.g[k][o];
p.c[cc] = t.c[cc] - ;
p.c[] = t.c[] + ;
p.g[i][j] = ;
if(jud(p)) q.push(p);
}
}
}
}
}
int main() {
CLR(dp, inf);CLR(vis,false);bfs();
int ka = , b, r, g, y, w, i, j, k, o;
while(~scanf("%d", &b), b) {
scanf("%d%d%d%d", &r, &g, &y, &w);
printf("Case %d: ", ka++);
int ans = inf;
for(i=;i<;++i)for(j=;j<;++j)for(k=;k<;++k)for(o=;o<;++o)
if(b*i+r*j+g*k+y*o >= w) ans = min(ans, dp[i][j][k][o]);
if(ans < inf) printf("%d\n" ,ans);
else puts("Impossible");
}
return ;
}
UVALive 4025 Color Squares(BFS)的更多相关文章
- UVALive 5066 Fire Drill BFS+背包
H - Fire Drill Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Sta ...
- UVALive 5066 Fire Drill --BFS+DP
题意:有一个三维的地图,有n个人被困住,现在消防队员只能从1楼的一个入口进入,营救被困者,每一个被困者有一个价值,当消防队员找到一个被困者之后,他可以营救或者见死不救,如果救的话,他必须马上将其背到入 ...
- uvalive 6888 Ricochet Robots bfs
题目链接 给一个n*m的图, 图上有n个标号, n<=4, 然后有墙, 还有一个终点x. 每一步, 只能走某一个标号, 可以向四个方向走, 然后必须要碰到墙或者图的边界或者另一个标号才能停下来. ...
- 洛谷 - P2730 - 魔板 Magic Squares - bfs
写状态转移弄了很久,老了,不记得自己的数组是怎么标号的了. #include <bits/stdc++.h> using namespace std; #define ll long lo ...
- UVALive 7040 Color (容斥原理+逆元+组合数+费马小定理+快速幂)
题目:传送门. 题意:t组数据,每组给定n,m,k.有n个格子,m种颜色,要求把每个格子涂上颜色且正好适用k种颜色且相邻的格子颜色不同,求一共有多少种方案,结果对1e9+7取余. 题解: 首先可以将m ...
- UVALive 7040 Color
题目链接:LA-7040 题意为用m种颜色给n个格子染色.问正好使用k种颜色的方案有多少. 首先很容易想到的是\( k * (k-1)^{n-1}\),这个算出来的是使用小于等于k种颜色给n个方格染色 ...
- 组合数+容斥原理 UVALive 7040 Color(14西安F)
题目传送门 题意:n盆花涂色,相邻不能涂相同的颜色,从m中颜色选取k种颜色涂,保证正好有k种颜色 分析:从m中颜色选取k种就是C (m, k),然后第一个有k种选择,之后的都有k-1种选择,这样是不超 ...
- UVA1599-Ideal Path(BFS进阶)
Problem UVA1599-Ideal Path Time Limit: 3000 mSec Problem Description New labyrinth attraction is ope ...
- UVA-1599 Ideal Path(双向BFS)
题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...
随机推荐
- MySql的索引操作
索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录.索引是提高数据库性能的重要方式.MySQL中,所有的数据类型都可以被索引.MySQL的索引包括普通索引.唯一性索引.全文索引.单列索引 ...
- Wamp设置虚拟目录
1. 默认安装 wamp后,工作目录为"..../wamp/www" 也就是PHP文件只有放在此目录下才能打得开,打开Apache的配置文件httpd.conf可以看到: 这么两行 ...
- Oracle 12c心得
1.重新启动Listener后,远程客户端登录不了,只能全新启动Oralce服务才能正常,经分析,用Net Manager增加一个服务器的IP地址的监听. 执行 net start 监听服务名 再远程 ...
- canvas绘制经典星空连线效果
来自:https://segmentfault.com/a/1190000009675230 下面开始coding:先写个canvas标签 <canvas height="620&qu ...
- MySQL 字段全部转换成小写
原因: 因为框架某些字段大写有时候不被正确识别,所以字段都修改成小写; 特别说明:因为这里只有表,没有视图,存储过程等等其它所以我可以直接这么写; 步骤: 1.导出结构语句 2. 执行C# 脚本,替换 ...
- 改善Java程序的151个建议(1-4)
1.不要在常量和变量中出现易混淆的数字 个人感觉这条在于编程命名的规范性.代码除了给机器看,也要给人看.要写能够结构清晰,命名规范,让人看懂的代码. 字母l作为长整型标志时务必大写 L 2.莫让常量蜕 ...
- Java温故而知新(4)类String字符串
字符串是由字符组成,在Java中,字符串是对象,是描述字符的基本数据结构.String类可以用来保存一个字符串,本类是最终类,不允许继承: 1.String对象的创建 初始化 由于String对象特别 ...
- docker 数据卷挂载总结
原文
- 深入浅出ConcurrentHashMap1.8
转载:https://www.jianshu.com/p/c0642afe03e0 好文 关于文章中的疑问:为什么要构造一个反序链表,放在nextTable的i+n的位置上呢,在<深入分析Con ...
- [翻译]Review——How to do Speech Recognition with Deep Learning
原文地址:https://medium.com/@ageitgey/machine-learning-is-fun-part-6-how-to-do-speech-recognition-with-d ...