题目链接:http://poj.org/problem?id=3414

题意:三个值A, B, C, A和B是两个杯子的容量,问最短操作数使A或者B里的水量是C。有三种操作。

思路:dfs.暴力 很简单。唯一不同的大概是这次做搜索都是自己想方设法的代码实现。中途很多问题。求得不是最大值。怎么保存操作过程。但好像不是原创方法。

附AC代码:

 // dfs 开始觉得一定是bfs 我只要把两个杯子的各种操作遍历一遍 直到某个杯子里的水和C相等就结束。
// 然后想到的是如何分开这两个杯子。因为一次操作改变的不一定是一个值。所以两个杯子的值也不能放在一个队列里遍历。
// 于是。就是dfs。觉得回溯时dfs参数为空和不回溯dfs参数有两个都是可以的。
// 详见代码。 #include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; int va, vb, c;
int vis[][];
int anss;
string ans;
string temp; void dfs(int aa, int bb, int step) {
if (aa == c || bb == c) {
if (anss > step) {
anss = step;
ans = temp;
}
return;
}
int a = aa, b = bb;
vis[a][b] = ;
string t = "";
// fill a
if (a < va) {
a = va;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp = t;
}
a = aa;
}
// drop a
if (a > ) {
a = ;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp =t;
}
a = aa;
}
// pour a to b
if (a > && b < vb) {
int ma = min(a, vb-b);
a -= ma;
b += ma;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp = t;
}
a = aa, b = bb;
} // fill b
if (b < vb) {
b = vb;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp = t;
}
b = bb;
}
// drop b
if (b > ) {
b = ;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
temp = t;
vis[a][b] = ;
}
b = bb;
}
// pour b to a
if (b > && a < va) {
int mb = min(b, va-a);
b -= mb;
a += mb;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
temp = t;
vis[a][b] = ;
}
a = aa;
b = bb;
}
return;
} int main() {
int a, b, step;
while(cin >> va >> vb >> c) {
anss = ;
a = , b = , step = ;
memset(vis, , sizeof(vis));
temp = "";
dfs(a, b, step);
if (anss == ) {
cout << "impossible\n";
continue;
}
cout << anss << endl;
int len = ans.length();
for (int i=; i<len; ++i) {
if (ans[i] == '') cout << "FILL(1)\n";
if (ans[i] == '') cout << "DROP(1)\n";
if (ans[i] == '') cout << "POUR(1,2)\n";
if (ans[i] == '') cout << "FILL(2)\n";
if (ans[i] == '') cout << "DROP(2)\n";
if (ans[i] == '') cout << "POUR(2,1)\n";
}
}
return ;
}

POJ 3414 dfs 回溯的更多相关文章

  1. 【POJ - 3009】Curling 2.0 (dfs+回溯)

    -->Curling 2.0 直接上中文 Descriptions: 今年的奥运会之后,在行星mm-21上冰壶越来越受欢迎.但是规则和我们的有点不同.这个游戏是在一个冰游戏板上玩的,上面有一个正 ...

  2. POJ 3414 Pots(罐子)

    POJ 3414 Pots(罐子) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 You are given two po ...

  3. poj 3414 Pots 【BFS+记录路径 】

    //yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...

  4. BFS POJ 3414 Pots

    题目传送门 /* BFS:六种情况讨论一下,BFS轻松解决 起初我看有人用DFS,我写了一遍,TLE..还是用BFS,结果特判时出错,逗了好长时间 看别人的代码简直是受罪,还好自己终于发现自己代码的小 ...

  5. 【BFS】POJ 3414

    直达 -> POJ 3414 Pots 相似题联动–>HDU 1495 非常可乐 题意:两个壶倒水,三种操作,两个桶其中一个满足等于C的最少操作,输出路径.注意a,b互倒的时候能不能倒满, ...

  6. POJ 3414 Pots

    Pots Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  7. 素数环(dfs+回溯)

    题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...

  8. NOJ 1074 Hey Judge(DFS回溯)

    Problem 1074: Hey Judge Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format: ...

  9. 广搜+输出路径 POJ 3414 Pots

    POJ 3414 Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13547   Accepted: 5718   ...

随机推荐

  1. scrapy爬虫系列之五--CrawlSpider的使用

    功能点:CrawlSpider的基本使用 爬取网站:保监会 主要代码: cf.py # -*- coding: utf-8 -*- import scrapy from scrapy.linkextr ...

  2. python https协议和InsecurePlatformWarning问题

    本人最近在学习python,今天想使用python来抓取糗事百科网站上的一些笑话故事的,由于糗事百科的网站url采取的是https协议,所以当我按照常规的方式抓取的时候,发现不行,报错了,找了很多方法 ...

  3. sql server学习路径地址

    联机丛书2005:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2005/ms130214(v=sql.90) 联 ...

  4. 离线状态 Postman不能开启Postman Interceptor解决

    目前的postman插件如果想正常使用,必须安装Postman Interceptor插件,这样才能直接使用chrome浏览器的cookie等信息,否则postman是无法完成老版本的功能的. 直接使 ...

  5. 比特股-去中心化交易所, STEEM - 去中心化社区, EOS - 下一代智能合约

    libsnark 是实现了 zkSNARK 模式的 C++ 库.zkSNARK 是一个证明/验证计算完整性的加密方法,也即零知识验证的算法, https://github.com/scipr-lab/ ...

  6. CentOS7系统上部署.net core程序

    一.准备工作 首先安装 xshell 和 xftp ,前者用于SSH连接Linux服务器,后者用于FTP上传下载文件. xshell和xftp个人使用是免费的,下载地址 之后分别输入用户名和密码登录主 ...

  7. Which adidas NMD Singapore is your favorite

    The adidas NMD Singapore just keeps the hits coming this fall with another change that's sure to bec ...

  8. android中代码操作外部SD卡出错:W/System.err(1595): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)

    AndroidManifest.xml 中加上: <uses-permission android:name="android.permission.WRITE_EXTERNAL_ST ...

  9. poj1673 EXOCENTER OF A TRIANGLE

    地址:http://poj.org/problem?id=1673 题目: EXOCENTER OF A TRIANGLE Time Limit: 1000MS   Memory Limit: 100 ...

  10. 对OpenCV中seamlessClone的初步实验

    seamlessClone是OpenCV中新出现的函数,应该说如果能够基于较为准确的图像分割,能够得到很好的结果. 原始的前景,背景 三种flag下的融合结果   //注意头文件中添加  #inclu ...