题目链接: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. 入门系列之在Nginx配置Gzip

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由小铁匠米兰的v 发表于云+社区专栏 简介 网站加载的速度取决于浏览器必须下载的所有文件的大小.减少要传输的文件的大小可以使网站不仅加载 ...

  2. [转载]ZendStudio格式化html错位问题修正

    原文链接leeon.me ZendStudio提供的HTML编辑功能感觉很强大,有时候觉得比dw更加人性化,而且整合php在一个编辑器上编写前端会方便很多,以前每次通过zend格式化html代码都会奇 ...

  3. Expression Blend实例中文教程(7) - 动画基础快速入门Animation

    通过前面文章学习,已经对Blend的开发界面,以及控件有了初步的认识.本文将讲述Blend的一个核心功能,动画设计.大家也许注意到,从开篇到现在,所有的文章都是属于快速入门,是因为这些文章,都是我曾经 ...

  4. .NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题

    今天在使用EF Code First框架时,当把模型都定义好了,想通过程序包管理控制台利用enable-migrations –force来生成数据库表的时候报错了,如下: 找不到连接字符串,但是我仔 ...

  5. C#基础:传入URL,获得Http Post

    #region 传入url,获得Http Post public string HttpGet(string url) { string result = string.Empty; try { va ...

  6. Kettle系列文章二(安装配置Kettle+SqlServer+简单的输入输出作业)

    一.下载 Kettle下载地址:https://community.hitachivantara.com/docs/DOC-1009855 下拉到DownLoad,点击红框中的链接进行下载.. 二.解 ...

  7. LDAP概念了解

    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.LDAP支持TCP/IP,这对访问Internet是必须的. L ...

  8. Oracle 数据库字典 sys.obj$ 表中关于type#的解释

    sys.obj$ 表是oracle 数据库字典表中的对象基础表,所有对象都在该表中有记录,其中type#字段表明对象类型,比如有一个表 test ,则该对象在sys.obj$ 中存在一条记录,name ...

  9. servlet开发(二)之servlet的线程安全问题

    之所以考虑线程安全问题,是因为引入了多线程.多线程指的是这个程序(一个进程)运行时产生了不止一个线程.如果不考虑多线程的话,程序执行只有一条路径,就像人在敲代码的时候只能敲代码,不能戴上耳机听歌.引入 ...

  10. Windows Server 2008 R2 搭建网站详细教程

    转自:http://jingyan.baidu.com/album/642c9d34098bf5644a46f71f.html?picindex=4 网上都有一些Windows Server 2008 ...