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

  1. UVALive 5066 Fire Drill BFS+背包

    H - Fire Drill Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Sta ...

  2. UVALive 5066 Fire Drill --BFS+DP

    题意:有一个三维的地图,有n个人被困住,现在消防队员只能从1楼的一个入口进入,营救被困者,每一个被困者有一个价值,当消防队员找到一个被困者之后,他可以营救或者见死不救,如果救的话,他必须马上将其背到入 ...

  3. uvalive 6888 Ricochet Robots bfs

    题目链接 给一个n*m的图, 图上有n个标号, n<=4, 然后有墙, 还有一个终点x. 每一步, 只能走某一个标号, 可以向四个方向走, 然后必须要碰到墙或者图的边界或者另一个标号才能停下来. ...

  4. 洛谷 - P2730 - 魔板 Magic Squares - bfs

    写状态转移弄了很久,老了,不记得自己的数组是怎么标号的了. #include <bits/stdc++.h> using namespace std; #define ll long lo ...

  5. UVALive 7040 Color (容斥原理+逆元+组合数+费马小定理+快速幂)

    题目:传送门. 题意:t组数据,每组给定n,m,k.有n个格子,m种颜色,要求把每个格子涂上颜色且正好适用k种颜色且相邻的格子颜色不同,求一共有多少种方案,结果对1e9+7取余. 题解: 首先可以将m ...

  6. UVALive 7040 Color

    题目链接:LA-7040 题意为用m种颜色给n个格子染色.问正好使用k种颜色的方案有多少. 首先很容易想到的是\( k * (k-1)^{n-1}\),这个算出来的是使用小于等于k种颜色给n个方格染色 ...

  7. 组合数+容斥原理 UVALive 7040 Color(14西安F)

    题目传送门 题意:n盆花涂色,相邻不能涂相同的颜色,从m中颜色选取k种颜色涂,保证正好有k种颜色 分析:从m中颜色选取k种就是C (m, k),然后第一个有k种选择,之后的都有k-1种选择,这样是不超 ...

  8. UVA1599-Ideal Path(BFS进阶)

    Problem UVA1599-Ideal Path Time Limit: 3000 mSec Problem Description New labyrinth attraction is ope ...

  9. UVA-1599 Ideal Path(双向BFS)

    题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...

随机推荐

  1. 面试题目: 获取服务器IP和客户端IP

    [面试题目] 怎么获取服务器IP和客户端IP地址? I. PHP获取客户端IP, 可通过下面系统变量 1. $_SERVER['Remote_Addr'] 2. $_SERVER['HTTP_CLIE ...

  2. 新时代运维重器 Tencent Hub 最佳实践——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲者:邹辉 腾讯云 PaaS 产品总监 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来" ...

  3. 《c++primer》疑惑记录

    第4章 96页,数组维数为变量 第8章 246. IO对象不可复制.赋值原因是类设计时复制构造函数.赋值函数是私有的,为什么这么设计呢? 251. tie举例 第15章 484 派生类可以恢复,但不可 ...

  4. vue基础知识之vue-resource/axios

    Vue基础知识之vue-resource和axios(三)   vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没 ...

  5. wcf 基本配置

    <system.serviceModel> <services> <service name="ServiceUpdater.ServiceUpdate&quo ...

  6. html元素两种分类。替换元素和不可替换元素;块级元素和行内元素

    根据元素本身特点来分类: 替换元素替换元素根据其标签和属性来决定元素的具体显示内容.有<img><input><textarea><select>< ...

  7. Vue-[v-model]理解示例

    对应文档节点: https://vuefe.cn/v2/guide/components.html#Customizing-Component-v-model <body> <div ...

  8. node.js缓存处理方式

    Node.JS缓存处理分为客户端和服务端两个部分. 客户端的缓存主要是利用浏览器对HTTP协议响应头中cache-control和expires字段的支持.浏览器在得到明确的响应头后,会将文件缓存在本 ...

  9. Linux基础之-利用shell脚本实现自动监控系统服务

    目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件: 1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命 ...

  10. Python爬虫教程-28-Selenium 操纵 Chrome

    我觉得本篇是很有意思的,闲着没事来看看! Python爬虫教程-28-Selenium 操纵 Chrome PhantomJS 幽灵浏览器,无界面浏览器,不渲染页面.Selenium + Phanto ...