洛谷 P1537 彈珠 搜尋

2021-09-10 22:39:39 字數 1340 閱讀 5779

瑪莎和比爾各自有自己的彈珠收藏。他們想重新分配收藏品,使兩人能平等擁有彈珠。如果所有的彈珠的價值相同,那麼他們就可以平分。但不幸的是,有一些彈珠更大,或者更美麗,所以,瑪莎和比爾給每個彈珠乙個1到6的價值。現在他們想平分這些彈珠,使每個人得到的總價值相同。不幸的是,他們發現,他們可能無法以這種方式分彈珠(即使彈珠的總價值為偶數)。例如,如果有乙個價值為1、乙個價值為3和兩個價值為4的彈珠,這樣他們就不能把彈珠分為價值相等的兩部分。因此,他們想要你寫乙個程式,告訴他們是否能將所有彈珠分成價值相等的兩部分。

輸入格式:

輸入檔案有若干行,行中包含六個非負整數n1,。..,n6,其中mi是數值i的彈珠的價值。最大彈珠總數將達到20000。

輸入檔案的最後一行是0 0 0 0 0 0 。不要處理這一行。

輸出格式:

對於每一組資料,輸出"collection #k:", k為輸出的是第幾組, 接著是"can be divided." 或 "can't be divided.".

每一組輸出後多打乙個空行。

輸入樣例#1

1 0 1 2 0 0 

1 0 0 0 1 1

0 0 0 0 0 0

輸出樣例#1

collection #1:

can't be divided.

collection #2:

can be divided.

正解應該是揹包,但是我不會寫。。你們動態規劃那麼難的麼?

因為正解是揹包,所以標籤會打上揹包dp。

dfs:

暴力列舉每個彈珠,看看是否能湊成兩個彈珠總價值的一半。(一開始我寫的暴力6重迴圈,後來一直20分)

#include #include #include using namespace std;

int n,s,a[7],flag;

void dfs(int now,int v)//now是當前的總價值,cnt是已經湊夠幾個彈珠總價值的一般

} register int i;

for(i=6;i>=1;i--)//不知道為什麼倒著搞就能很快

a[i]++;

} }}int main()

if(s==0)

cout<<"collection #"<>=1;//總價值一半

dfs(0,0);

if(flag==1)

else

lp:cout<<"can't be divided."

cout<} return 0;

}

洛谷 P2356 彈珠遊戲

元宵節不放假挺鬱悶的,於是時間機智的改到了星期6一整天!medalplus 和他的小夥伴 noirp 發掘了乙個骨灰級別的遊戲 超級彈珠。遊戲的內容是 在乙個 n n 的矩陣裡,有若干個敵人,你的彈珠可以摧毀敵人,但只 能攻擊你所在的行 列裡的所有敵人,然後你就可以獲得他們的分數之和,現在請你選擇 ...

洛谷 P2356 彈珠遊戲 題解

自我感覺應該沒有用結構體做的吧 這道題其實非常水 很適合初學貪心的同學做一下 我好像沒有用貪心做,嘻嘻 首先先讀題,題目中說這個遊戲只能消滅當前所在位置的行 列的敵人 首先特判一下 if tt 1 for int j 1 j n j maxn max maxn,sum1 第一層是列舉所有的落腳點 第...

洛谷P1135 搜尋

乙個水題,不過我dfs還是不太行,wa了兩次 這題可以用dfs和bfs寫,另外也可以建圖跑最短路。下面放雙搜 bfs int a 210 int a,b bool vis 210 int n int ff 1 struct node queue q void bfs if temp.now a te...