瑪莎和比爾各自有自己的彈珠收藏。他們想重新分配收藏品,使兩人能平等擁有彈珠。如果所有的彈珠的價值相同,那麼他們就可以平分。但不幸的是,有一些彈珠更大,或者更美麗,所以,瑪莎和比爾給每個彈珠乙個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輸出樣例#11 0 0 0 1 1
0 0 0 0 0 0
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...