题目链接: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. EPPlus导入导出不占用进程

    导入: using (ExcelPackage package = new ExcelPackage(new FileStream(openFile.FileName, FileMode.Open, ...

  2. 使用C#委托来实现异步编程

    最近在我参与的几个.Net项目中都有用到异步编程,作为一名.Net小白,很有必要好好地学习一下异步编程. 什么是异步编程 异步编程指的就是不用阻塞当前线程来等待任务的完成,而是将任务扔到线程池中去执行 ...

  3. jquery获取子元素

    Jquery获取子元素的方法有2种,分别是children()方法和find()方法. 下面我们分别来使用这两种方法,看看它们有何差异. children()方法:获取该元素下的直接子集元素 find ...

  4. 数据结构(二) --- 伸展树(Splay Tree)

    文章图片和代码来自邓俊辉老师课件 概述 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由丹尼尔·斯立特Daniel Sleator ...

  5. [转]what’s the difference between @Component ,@Repository & @Service annotations in Spring

    原文地址:https://www.cnblogs.com/softidea/p/6070314.html @Component is equivalent to <bean> @Servi ...

  6. Go.基础篇-1

    package main import "fmt" import "math" import "errors" func main(){ f ...

  7. javaEE Design Patter(2)详解3个设计模式

    Factory (bean creating) Proxy(Agent)(Aop)书有~ Templete(springMVC Facelets)//此处及以上忽略 工厂模式(Factory) 工厂模 ...

  8. 初步理解require.js模块化编程

    初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...

  9. CSS基础-CSS三大特性

    继承性 层叠性 优先级 优先级权重 !important

  10. jquery not() 方法

    1.not(expression) 根据表达式参数的值,从包装集里删除元素 example : $('img[alt]').not('[alt*=joy]') 返回包含属性alt的img元素,但img ...