题目大意:经典的倒水问题。

给你三个瓶子,体积为a,b,c。

刚開始a。b是空的,c是满的,如今要求你到出体积为d的水。倒水的规则为,要么倒水方为空,要么接水方满

问倒到容量为d时,倒水的最小体积是多少。假设不能倒出体积为d的水,找出d’ < d,最接近d的d’和最小的体积

解题思路:刚才时以为直接bfs,用vis标记一下就结束了,结果WA了。为什么会WA。由于我这样求的是倒水次数最少的,而不是倒水体积最小的,WA是肯定的了

接着将vis数组改成int型的,纪录达到这个状态时倒水的体积。结果可想而之TLE(可能是我写搓了。。)

借鉴了一下别人的,恍然大悟,用一个数组代表倒出这个体积的水时倒的水的最小体积,这样就能够降低非常多种情况了,确实是一个大剪枝

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; #define N 210
#define INF 0x3f3f3f3f struct Node{
int have[3];
int d;
}n1, n2; int done[N], val[3];
int d;
bool vis[N][N]; void init() {
memset(vis, 0, sizeof(vis));
memset(done, 0x3f, sizeof(done));
scanf("%d%d%d%d", &val[0], &val[1], &val[2], &d);
done[0] = done[val[2]] = 0;
} void bfs() {
queue<Node> Q;
vis[0][0] = true;
n1.have[0] = n1.have[1] = n1.d = 0;
n1.have[2] = val[2];
Q.push(n1); while (!Q.empty()) {
n1 = Q.front();
Q.pop(); for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if (i ^ j) {
n2 = n1;
int tmp = val[j] - n2.have[j] < n2.have[i] ? val[j] - n2.have[j] : n2.have[i];
n2.have[j] += tmp;
n2.have[i] -= tmp;
n2.d += tmp; if (!vis[n2.have[0]][n2.have[1]] || done[n2.have[0]] > n2.d || done[n2.have[1]] > n2.d || done[n2.have[2]] > n2.d) {
vis[n2.have[0]][n2.have[1]] = true;
for (int k = 0; k < 3; k++) {
done[n2.have[k]] = min(done[n2.have[k]], n2.d);
}
Q.push(n2);
}
}
}
}
} void solve() {
bfs();
for (int i = d; i >= 0; i--)
if (done[i] != INF) {
printf("%d %d\n", done[i], i);
break;
}
}
int main() {
int test;
scanf("%d", &test);
while (test--) {
init();
solve();
}
return 0;
}

最新文章

  1. IIS上部署Net.Core
  2. html导入css样式的方法
  3. Bootflat – 基于 Bootstrap CSS 框架的扁平化界面
  4. LUA_linux的安装
  5. 多线程程序设计学习(8)Thread-Per-Message
  6. PHP扩展开发之简单类开发
  7. Centos下安装jdk详解
  8. css实现一行居中显示,两行靠左显示,超过两行以引号省略
  9. 《java入门第一季》之StringBuffer小案例
  10. vue项目通过webpack打包生成的dist文件放到express环境里运行(vue+webpack+express)
  11. &lt;笔记&gt;TP5的save方法返回值
  12. 全栈开发工程师微信小程序-中(下)
  13. Python Django 的学习资料
  14. 如何在首次启动 Linux 虚拟机时对其进行自定义
  15. 区间DP的思路(摘自NewErA)及自己的心得
  16. $fhqTreap$
  17. jquery经常使用操作
  18. React-Native基础_5.列表视图ListView
  19. 20145218张晓涵_Web基础
  20. JavaScript Event Loop和微任务、宏任务

热门文章

  1. loj2024「JLOI / SHOI2016」侦查守卫
  2. monkey测试工具与常用的linux命令
  3. Mongodb 删除记录里的某个字段
  4. js中的事件委托和事件代理详解
  5. javascript学习笔记 - 引用类型 Function
  6. 自己的Qt GUI 项目+vs2013+opencv+caffe环境配置
  7. iOS--app自定义相册--从自定义的相册中获取图片
  8. [LOJ#515]「LibreOJ β Round #2」贪心只能过样例
  9. BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA
  10. 微软2014实习生及秋令营技术类职位在线测试(题目1 : String reorder)