日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无脑博士的试管们java_计蒜客 无脑博士和他的试管们

發布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无脑博士的试管们java_计蒜客 无脑博士和他的试管们 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

標簽:

無腦博士有三個容量分別是A,B,C升的試管,A,B,C分別是三個從1到20的整數,最初,A和B試管都是空的,而C試管是裝滿硫酸銅溶液的。有時,無腦博士把硫酸銅溶液從一個試管倒到另一個試管中,直到被灌試管裝滿或原試管空了。當然每一次灌注都是完全的。由于無腦博士天天這么折騰,早已熟練,溶液在倒的過程中不會有丟失。

寫一個程序去幫助無腦博士找出當A是個是空的時候,C試管中硫酸銅溶液所剩量的所有可能性。

輸入包括一行,為空格分隔開的三個數,分別為整數A,B和C。

輸出包括一行,升序地列出當A試管是空的時候,C試管溶液所剩量的所有可能性。

樣例1

輸入:

2 5 10

輸出:

5 6 7 8 9 10#include

#include

#define MAX 21

int state[MAX][MAX],A,B,C;//狀態數組state[i][j]代表A試管中有 i 升 溶液 B試管中有 j 升溶液的狀態是否存在

void dfs(int a,int b,int c){

?????state[a][b]=1;

?????if(a

??????????if(c>=A-a&&state[A][b]==0)dfs(A,b,c-A+a);//可倒滿

??????????if(c

??????????if(b>=A-a&&state[A][b-A+a]==0)dfs(A,b-A+a,c);

??????????if(b

??????}

??????if(b

??????????if(c>=B-b&&state[a][B]==0)dfs(a,B,c-B+b);

??????????if(c

??????????if(a>=B-b&&state[a-B+b][B]==0)dfs(a-B+b,B,c);

??????????if(a

??????}

??????if(c

??????????if(a>=C-c&&state[a-C+c][b]==0)dfs(a-C+c,b,C);

??????????if(a

??????????if(b>=C-c&&state[a][b-C+c]==0)dfs(a,b-C+c,C);

??????????if(b

??????}

}

int main(){

???int i;

???scanf("%d%d%d",&A,&B,&C);

???memset(state,0,sizeof(state));

???dfs(0,0,C);

???int frist=1;//用于保證輸出格式,首次輸出不在數字前加空格

???for(i=B;i>=0;i--){

??????if(state[0][i]){//若存在A試管為0,B試管為 i的狀態,則輸出

?????????if(frist)frist=0;

?????????else printf("");

??????????????printf("%d",C-i);

?????????????}

??????}

????return 0;

}

?

又是一道dp題目(和倒水問題很像)這次就是用到所謂記憶化搜索的方式進行動態規劃,同時對解答圖進行了dfs,練習dfs就是我做這題的本意。

因為總的溶液量為C 故 可用(i,j)來表示狀態,i 為試管 A 當前容量 ,j 為 試管B 當前容量, 顯然,C 試管容量為 C – i - j,從(i,j)狀態可能發生的變化,即倒水的方式只有

c -> a ,b - > a, c - > b, a -> b, a -> c , b - >c 這6種方式。

而從 一個試管倒水到另一個試管有兩種可能性,倒水試管和變為 0 和接水 試管被倒滿 (我們可把倒水試管變為0且接水試管接滿歸到兩種情況之一),

于是我們可通過兩試管當前容量與最大容量的關系來判斷某種倒水方式能否進行

同時,對于可能出現的重復狀態,我們用數組state來進行記憶,標志某種狀態是否出現過,來減少重復計算,同時可用state數組來得出最終解。又發現狀態即為解的情況。。

最后又是吐槽時間,計蒜客的題目的分類讓我總是能快速找到解題的方向,這道題想出思路花了我沒多久時間,因為是遞歸的實現起來也不能,就是在if判斷哪里碼了好久,尼瑪

一點錯誤都不能有,我只能小心翼翼地寫,幸虧一次正確,但是這題我還是WA了,因為輸出格式錯誤,我做過這么多題(并沒有)還是第一次看到這種錯誤提示,從白書里看到

的技巧第一次有了用武之地,然后就AC了,這題還是蠻水的,但也挺典型的。還有下載的word代碼高亮插件不給力啊。。為什么沒有C/C++的啊!幸虧其他語言也有

int If //注釋什么的,有了這些基本代碼還能看,還有我真的無法對vim喜歡起來,特別是計蒜客那個在線閹割版的,我就是個只能靠IDE的普通人沒辦法。。

標簽:

總結

以上是生活随笔為你收集整理的无脑博士的试管们java_计蒜客 无脑博士和他的试管们的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。