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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU 1495(非常可乐)

發布時間:2024/8/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 1495(非常可乐) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem Description

大家一定覺的運動以后喝可樂是一件很愜意的事情,但是seeyou卻不這么認為。因為每次當seeyou買了可樂以后,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是N 毫升和M 毫升 可樂的體積為S (S<101)毫升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聰明的ACMER你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"NO"。

?

Input

三個整數 : S 可樂的體積 , N 和 M是兩個杯子的容量,以"0 0 0"結束。

?

Output

如果能平分的話請輸出最少要倒的次數,否則輸出"NO"。

?

Sample Input

7 4 3 4 1 3 0 0 0

?

Sample Output

NO 3

?

Author

seeyou

代碼(網上):/*BFS簡單題
Author: shaorui
鏈接地址: http://acm.hdu.edu.cn/showproblem.php?pid=1495
思路:預處理m < n < s,以后處理方便點
初始狀態,m,n杯中可樂體積為0,s杯中體積為s;
然后分六種情況:
1, s 倒 m
2, s 倒 n
3, m 倒 n
4, m 倒 s
5, n 倒 m
6, n 倒 s

隊列中存儲的內容為不同的走法上面可以理解成走迷宮中6種不同的走法,由于最少次數等分情況是可樂瓶和刻度大的杯中等分,因此刻度下的杯子肯定為0,設置限定條件對應每種走法,每種走法有對應6種走法,以此類推直到等分或隊列為空退出。
直到n,s杯中的可樂能等分(此時m杯中體積為0)為止,若不能等分,則輸出 NO

#include<iostream> #include<algorithm> #include<queue> using namespace std; #define maxn 101 bool visited[maxn][maxn]; int m,n,s,si,sj; struct node {int x,y,all,t; ?//x,y,all分別表示m,n,s杯中可樂的體積,t表示倒了多少次 }; void BFS() {queue<node> que;memset(visited,false,sizeof(visited));node p,q;p.x = 0,p.y = 0,p.t = 0,p.all = s;que.push(p);visited[p.x][p.y] = true;while(!que.empty()){p = que.front();que.pop();if(p.y == p.all && p.y == s/2) ? ? ? ? ? ??{printf("%d\n",p.t);return;}if(p.all+p.x > m) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //s倒m{q.x = m,q.y = p.y,q.all = p.all+p.x-m,q.t = p.t+1;if(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}else{q.x = p.all+p.x,q.y = p.y,q.all = 0,q.t = p.t+1;if(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}if(p.all+p.y > n) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//s倒n{q.x = p.x, q.y = n, q.all = p.all+p.y-n,q.t = p.t+1;if(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}else{q.x = p.x,q.y = p.all+p.y,q.all = 0,q.t = p.t+1;if(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}if(p.x+p.y > n) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//m倒n{q.x = p.x+p.y-n,q.y = n,q.all = p.all,q.t = p.t+1;?if(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}else{q.x = 0,q.y = p.x+p.y,q.all = p.all,q.t = p.t+1;if(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}q.all = p.all+p.x,q.x = 0,q.y = p.y,q.t = p.t+1; //m倒sif(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true; ?if(p.x+p.y > m){q.y = p.y+p.x-m,q.x = m,q.all = p.all,q.t = p.t+1;//n倒mif(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}else{q.x = p.x+p.y,q.y = 0,q.all = p.all,q.t = p.t+1;if(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}q.all = p.all+p.y,q.x = p.x,q.y = 0,q.t = p.t+1; //n倒sif(!visited[q.x][q.y])que.push(q),visited[q.x][q.y] = true;}printf("NO\n"); } int main() {//freopen("1013.txt","r",stdin);while(scanf("%d%d%d",&s,&m,&n) && (s||m||n)){if(s%2){printf("NO\n");continue;}if(m > n) swap(m,n);BFS();}return 0; }

自己目前還沒有完全寫出來,出來后再附上自己的代碼

總結

以上是生活随笔為你收集整理的HDU 1495(非常可乐)的全部內容,希望文章能夠幫你解決所遇到的問題。

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