C_and_CPP 板


LINE

首先,先來看看我對問題的理解有沒有錯 以假設有四種包裝而言,不一定要四種全部用到, 例如只用兩種或三種包裝,只要滿足最後要的結果(即三種size數量一樣) 如果問題不是這樣,那不用往下看了 @@ -------------------------------------------- 假設有n種包裝,用y[n]來存放 0~3,0即未使用此包裝,依此類推 (不確定題目有無係數規定,因為看到最高係數為3) x1[n]、x2[n]、x3[n]來存放每一個包裝的數量 所以就.....寫個迴圈 ex: n=4 ( y[1], y[2], y[3], y[4] ) = (1, 0, 0, 0) = (0, 1, 0, 0) = (0, 0, 1, 0) ...... ...... ...... = (3, 3, 3, 3) 在每一次回合中,判斷三種數量是否相同 例如可以直接先算出一個值 Cup_Num = x1[i]*y[1]; i=0~3 (因為目前有四種包裝) 再去比較與x2[i]*y[1]及x3[i]*y[1]是否相同 (即三種數量是否相同) 否:next iteration 是:恭喜,至少存在一解 不知道這樣的想法有沒有錯,本來是要直接寫程式,但是太懶了 = = PS.一開始看到整數規劃,以為在討論branch and bound......@@ ※ 引述《deepdish (D 調的華麗)》之銘言: : http://online-judge.uva.es/p/v100/10089.html : 稍微翻譯一下題目 : -------------------------------------------------------------------------- : 咖啡杯有三種大小 : 但最近發現有很大需求包裝相同數量的三種杯子 : 所以 為了趕緊符合要求 ACM 決定要將一些未銷售產品包裝拆開 : 重新包裝為相同數量的三種杯子, : 而且不能有未包裝杯子剩下 : 找出這種組合是否存在 : --------------------------------------------------------------------------- : 假設有四種包裝 (1, 2, 3), (1, 11, 5), (9, 4, 3), (2, 3, 2). : (1,11,5) 代表這個包裝中第一種咖啡杯 1 個,第二種咖啡杯 11 個,第三種咖啡杯 5 個 : 剛好找到一解,第一種包裝三包 + 第三種包裝一包 + 第四種包裝兩包,如下: : 3 * (1,2,3) + (9,4,3) + 2 * (2,3,2) == 16 * (1,1,1) : 另外一個範例:假設有四種包裝 (1, 3, 3), (1, 11, 5), (9, 4, 3), (2, 3, 2) : 但是沒有解 : 請問高手要怎麼解這一題︿︿? : 用了高中數學的克拉馬法則每次挑三個不同包裝去解 : 答案和範例輸入輸出一樣 : 可是答案上傳到線上判斷是錯誤的 >.<~ : 問了好多人,想了很多天還是解不出來...... : 錯誤的程式碼如下: : #ifndef ONLINE_JUDGE : #include <fstream> : #endif : #include <iostream> : using namespace std; : bool check(int p, int q) : { // 檢查分數是否為正數 : if(p > 0 && q >= 0) : return true; : else if(p < 0 && q <= 0) : return true; : else : return false; : } : int main() : { : #ifndef ONLINE_JUDGE : ifstream cin("ACM10089.txt"); : #endif : int c, d, d1, d2, d3, i, j, k, n, x, y, z; : bool ans; : while( cin >> n ) : { : if(n == 0) : break; : ans = false; : int a[n][3]; : //c = n * (n - 1) * (n - 2) / 6; : //cout << "c = " << c << endl; : for(i = 0; i < n; i++) : for(j = 0; j < 3; j++) : cin >> a[i][j]; : //for(i = 0; i < n; i++, cout << endl) : //for(j = 0; j < 3; j++) : //cout << a[i][j] << " "; : for(i = 0; i < n - 2; i++) // 0-1 : { : for(j = i + 1; j < n - 1; j++) // 1-2 : { : for(k = j + 1; k < n; k++) // 2-3 : { : for(x = 0, d = 0; x < 3; x++) : { : y = (x + 1 == 3) ? 0 : x + 1; : z = (x + 2 > 2) ? x - 1 : x + 2; : d += a[i][x] * a[j][y] * a[k][z]; : d -= a[k][x] * a[j][y] * a[i][z]; : } : //cout << "d = " << d << endl; : if(d == 0) // 分母不得為零 : break; : for(x = 0, d1 = 0; x < 3; x++) : { : y = (x + 1 == 3) ? 0 : x + 1; : z = (x + 2 > 2) ? x - 1 : x + 2; : d1 += 1 * a[j][y] * a[k][z]; : d1 -= a[k][x] * a[j][y] * 1; : } : //cout << "d1 = " << d1 << endl; : if(check(d, d1)== false) : break; : for(x = 0, d2 = 0; x < 3; x++) : { : y = (x + 1 == 3) ? 0 : x + 1; : z = (x + 2 > 2) ? x - 1 : x + 2; : d2 += a[i][x] * 1 * a[k][z]; : d2 -= a[k][x] * 1 * a[i][z]; : } : //cout << "d2 = " << d2 << endl; : if(check(d, d2)== false) : break; : for(x = 0, d3 = 0; x < 3; x++) : { : y = (x + 1 == 3) ? 0 : x + 1; : z = (x + 2 > 2) ? x - 1 : x + 2; : d3 += a[i][x] * a[j][y] * 1; : d3 -= 1 * a[j][y] * a[i][z]; : } : //cout << "d3 = " << d3 << endl; : if(check(d, d3)== false) : break; : ans = true; : } : if(ans) : break; : } : if(ans) : break; : } : if(ans) : cout << "Yes" << endl; : else : cout << "No" << endl; : } : #ifndef ONLINE_JUDGE : system("pause"); : #endif : return 0; : } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.111.146
1F:推 drkkimo:這個討論我也蠻想研究看看的 只是今天很累= =先m再說 03/25 23:18
2F:推 deepdish:感謝~終於有人回應了~先給我時間看一下~ 03/26 00:09
3F:推 deepdish:題目規定 3<=n<=1000, 包裝個數係數無限制 03/26 00:17
4F:→ gavintsou:n不是包裝個數? 但其實應該可以發現,對整個想法沒有影 03/26 01:10
5F:→ gavintsou:響...可以依題目的規定寫作程式 只是這個想法的複雜度 03/26 01:11
6F:→ gavintsou:有待加強...如果用branch and bound 以 heap 的方式 03/26 01:12
7F:→ gavintsou:世界上對於這種IP的問題,也還是在branch and bound.... 03/26 01:16
8F:推 deepdish:解出來了~方法請見 http://0rz.net/a81cF 有興趣可以問我 03/27 20:58







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP