待學習。。
//看了上面**,自己給思路改進了一下,**如下:study.cpp: 定義控制台應用程式的入口點。
//#include "
stdafx.h
"#include
#include
#include
#include
#include
using
namespace
std;
/*將4杯子倒水問題改為乙個足夠大的杯子倒向4個杯子
*/bitset
<17043521> hash;/*
(大小為64*64^4+64*64^3+64*64^2+64*64^1+64*64^0)記錄每次操作後的abcd杯子的當前容量是否已經存在過
*/const
int max_step = 100000
;int wq[max_step][6];/*
記錄每步操作後0和abcd的當前容量,最後乙個記錄操作次數
*/int goal[5];/*
0和abcd杯子最終狀態
*/int cap[5]; /*
0和abcd杯子的最大容量
*/int
goalval;
int head = 0
;int tail = 0
;void movw(int numfrom, int numto, int other1, int other2, int other3)/*
numfrom倒入numto
*/
else
int hashval = wq[tail][1] * 262144 + wq[tail][2] * 4096 + wq[tail][3] * 64 + wq[tail][4];/*
把abcd杯子需要的狀態抽象為乙個值
*/if (hashval == goalval) throw wq[head][5] + 1;/*
判斷是否為最終狀態
*/if (!hash[hashval])/*
該次操作之後的狀態之前未存在過並記錄*/}
intmain()
cap[
0] = 6400;/*
0杯子為足夠大的杯子,0杯子的容量
*/wq[tail][
0] = 6400;/*
0杯子的當前容量
*//*
初始化abcd杯子當前值為0
*/wq[tail][
1] = 0
; wq[tail][
2] = 0
; wq[tail][
3] = 0
; wq[tail][
4] = 0
; wq[tail][
5] = 0
; ++tail;
try
if (wq[head][1
])
if (wq[head][2
])
if (wq[head][3
])
if (wq[head][4
])
if (++head ==max_step)
}printf("-1
");}
catch (int
step)
}
類似於圖的廣度優先遍歷,每一種情況都乙個個入佇列,然後判斷是否和預期的狀態相等,相等時候停止迴圈,輸出並返回。
// study.cpp: 定義控制台應用程式的入口點。//#include "stdafx.h"
#include #include #include #include #include #include #include using namespace std;
//儲存每一種狀態
bool m[64][64][64][64];
//int step=0;
const int maxstep = 10000;
vectorcap(4), goal(4);
class state
int a, b, c, d;
int step;
};queuequeue();
//對序號k進行操作,裝滿,或者匯入其他容器
void water_solution(int t[5],int k)
); m[t[0]][t[1]][t[2]][t[3]] = 1;
} t[k] = tmp;
} //有剩餘的水,可倒給其他杯子
if (t[k] != 0)
); m[t[0]][t[1]][t[2]][t[3]] = 1;
}t[k] = tmp;
continue;
}//倒給別人,1:倒不完
if (t[k] + t[i] >= cap[i])
);m[t[0]][t[1]][t[2]][t[3]] = 1;
}t[k] = tmp;
t[i] = tmp2;
}else
);m[t[0]][t[1]][t[2]][t[3]] = 1;
}t[k] = tmp;
t[i] = tmp2;
}} }
}int main()
; int k = 0;
while (!queue.empty())
for(int i=0;i<4;i++)
water_solution(t, i);
} cout << -1;
system("pause");
return 0;
}
貪心演算法 牛客倒水
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 有乙個大水缸,裡面水的溫度為t單位,體積為c公升。另有n杯水 假設每個杯子的容量是無限的 每杯水的溫度為t i 單位,體積為c i 公升。現在要把大水缸的水倒...
牛客網 洗牌問題
問題描述 洗牌在生活中十分常見,現在需要寫乙個程式模擬洗牌的過程。現在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張 上半堆 右手拿 著第n 1張到第2n張 下半堆 接著就開始洗牌的過程,先放下右手的最後一張牌,再放下左手的...
CODEVS 倒水問題
題目描述 有兩個無刻度標誌的水壺,分別可裝 x 公升和 y 公升 x,y 為整數且均不大於 100 的水。設另有一水 缸,可用來向水壺灌水或接從水壺中倒出的水,兩水壺間,水也可以相互傾倒。已知 x 公升壺為空 壺,y 公升壺為空壺。問如何通過倒水或灌水操作,用最少步數能在x或y公升的壺中量出 z z...