題意:就是有倆被子容量a b,讓你想辦法讓b裡面裝n些水。然後有六種操作
輸出次數和過程。
思路:剛開始我以為就觀察a n的關係來寫就行了,唉寫了半天40分
錯誤**:
/*35
4n>
a把b倒滿
然後不斷地進行b倒給a,
滿了把a倒空,然後再來重複,知道a
b其中乙個等於n
用了六步
1.把b倒滿。a=
0,b=
5,2.b倒給a。a=
3,b=
2;3.把a倒空a=
0,b=
2;4.b倒給aa=
2,b=
05.倒滿ba=2
b=5;
6.b倒給aa=
3b=4
;*//
*573
a>
n把a倒滿
然後不斷地進行a倒給b,滿了把b倒空,
然後再來重複,知道a
b其中乙個等於n用了6
步1.把a倒滿a=
5b=7
2.把a倒給ba=
0b=5
3.把a倒滿a=
5,b=
5;4.把a倒給ba=
3,b=
7;5.把b倒空a=
3,b=
06.把a倒給ba=
0,b=
3;*/
#include
<
iostream
>
#include
<
cstdio
>
#include
<
cmath
>
#include
<
string
>
#include
<
cstring
>
#include
<
stack
>
#include
<
algorithm
>
#include
<
iomanip
>
#include
<
map>
#include
<
queue
>
#include
<
vector
>
#include
<
set>
const
intinf
=0x3f3f3f3f;/
/1061109567
typedef
long
longll;
using
namespace
std;
intv
[100000];
voidf(
inta
,intb,
intn
)elseif(
aa==n
||bb=
=n)break;if
(bb==
0)if(
aa==a
)}}elseif(
nelseif(
aa==n
||bb=
=n)break;if
(aa==
0)if(
bb==b
)}}if
(aa==
n)cout
<
<
s<
<
" ";
for(
inti=1
;i<=s
;i++
)cout
<
i]<
<
" ";
cout
<
<
endl;}
intmain()
elseif(
b==n
)f(a
,b,n
);}}
正確思路:用dfs來做!!!!
設立陣列
int x[6][3] =
,//x[0][0] x[0][1] x[0][2]
,//x[1][0] x[1][1] x[1][2]
,//x[2][0] x[2][1] x[2][2],,
};vis表示狀態 now陣列表示當前步 ,best 表示好的方案步.
用dfs搜尋。
#include
<
iostream
>
#include
<
cstdio
>
#include
<
cmath
>
#include
<
string
>
#include
<
cstring
>
#include
<
stack
>
#include
<
algorithm
>
#include
<
iomanip
>
#include
<
map>
#include
<
queue
>
#include
<
vector
>
#include
<
set>
const
intinf
=0x3f3f3f3f;/
/1061109567
typedef
long
longll;
using
namespace
std;
inta,b
,n;bool
vis[
3010][
3010];
intnow
[100010],
best
[100010],
k;void
dfs(
inta
,intb,
intc
)int
tmp1
,tmp2;if
(a+b
>a)
tmp1=a
;else
tmp1=a
+b;if
(a+b
>b)
tmp2=b
;else
tmp2=a
+b;intx[
6][3
]=,/
/x[0
][0]
x[0]
[1]x
[0][
2],/
/x[1
][0]
x[1]
[1]x
[1][
2],/
/x[2
][0]
x[2]
[1]x
[2][
2],,
};vis[a]
[b] =
1;for(
inti=0
;i<6;
i++)
}vis[a
][b]
=0;}
intmain()
}
洛谷 P1432 倒水問題
戳 bfs 第一遍提交 50 第二遍就 100 了,qwq include include include include includeusing namespace std int t,ca,cb,n,step,sum int a now 100001 b now 100001 flag 100...
P1582 倒水(思維)
思路 首先如果乙個數等於2的n次方,那麼合併後一定是1個瓶子。而2的n次方中1的個數也是1個,13的二進位制1 1 0 1,二進位制1的個數3個,剛好13合併後是3個瓶子。我們可以得到乙個數二進位制1的個數就是這個數合併後的瓶子個數。我們在學樹狀陣列時有乙個lowbit函式 x x 就是取最後一位1...
P1582 倒水 題解
來水一發水題。題目鏈結。正解開始 首先,我們根據題意,可以得知這是乙個有關二進位制的題目 具體什麼關係,怎麼做,我們來具體分析 對於每個n,我們嘗試將其二進位制分解,也就是100101之類的形式 根據瓶子合併的特性,我們可以判定最後每乙個瓶子內的水都可以表示成2 i的形式 感性理解 對於每乙個數字上...