作者AmosYang (Omoide wa Okkusenman!)
看板Prob_Solve
标题Re: [问题] 乐透号码最佳化的问题
时间Sun Feb 27 11:31:56 2011
※ 引述《bleed1979 (十三)》之铭言:
: 我试着先改成以下的情况,复制了之前计算过的method。
: 跑出的答案就是1600, choose: 1 2 3 4
: 不过我想可能要多生几个case来测试,无法确认正确性。
: Bleed
: for(int i = 0; i < n; ++i) {
: if(i > 0) {
: method[i] = method[i - 1];
: }
copy 那组虚拟的解我认为是错的,因为就 method[200] 而言,
0 的 bit pattern 所代表的号码不应该让购买者中 $200
且这里用 i 当 method 的 index 很奇怪…
method 的 index 是奖金的金额
i 是下注奖卷的 index...
: for(int j = sum; j >= coin[i]; --j) {
: int k = j - coin[i];
: if(method[k].size()) {
: set<int> :: iterator it = method[k].begin();
: while(it != method[k].end()) {
: int new_int = *it | coin_bit[i];
: if(count_bit(new_int) <= 5) {
: method[j].insert(new_int);
: }
: ++it;
: }
: }
: }
: }
: Bleed
: ==
: 我刚看懂意思了,的确有盲点。
: 现在改一下程式码,希望不要大改才好。
: Bleed
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.40.140.129
坦白说我觉得很困惑为什麽加上 method[i] = method[i - 1];
就可以跑出正确的答案 :D
(我手边没有 compiler + debugger, 没法实测)
※ 编辑: AmosYang 来自: 24.40.140.129 (02/27 11:42)
我猜 method[i] = method[i - 1]; 是
method[coin[i]] = method[coin[i-1]] 的误植 …
不过…还是很怪 :D
※ 编辑: AmosYang 来自: 24.40.140.129 (02/27 12:44)
1F:→ bleed1979:加那一段的确是错的,应该是凑巧刚好对的。 02/27 12:57