Re: [問題] 有限制的依順序選取問題已回收
你好:
我寫了一小段程式供你參考,希望是你想要的結果,有問題可以再討論。
%sum_last為最後結果
clear,clc
area_matrix = [3 3 4 1 3;2 4 3 3 1;3 2 2 1 1;4 2 3 1 2;3 2 2 1 3];
area_matrix = area_matrix';
order = [1 2 3 4 5]; %輸入選取次序
area = area_matrix(order);
sum_last = 0;
sum_pre = 0;
i = 1;
select = [];
while (sum_last < 10) & (i <= numel(order))
sum_pre = sum_last;
sum_last = sum_pre + area(i);
while (sum_last > 10) & (i < numel(order))
i = i + 1;
sum_last = sum_pre + area(i);
end
if (sum_last <= 10) & (i <= numel(order))
select(i) = order(i);
i = i + 1;
end
if (sum_last > 10) & (i >= numel(order))
sum_last = sum_pre;
i = i + 1;
end
end
fprintf('加總面積為%d\n',sum_last)
fprintf('選取位置為%d\n',select((select ~= 0)))
※ 引述《asa19860508 (asa)》之銘言:
: 有一個5*5矩陣,分別對應面積如下:
: 位置:[ 1 2 3 4 5
: 6 7 8 9 10
: 11 12 13 14 15
: 16 17 18 19 20
: 21 22 23 24 25]
: 面積:[3 3 4 1 3
: 2 4 3 3 1
: 3 2 2 1 1
: 4 2 3 1 2
: 3 2 2 1 3]
: 現在想隨機選取4個5個及6個地區進行限制為10單位的面積的選取
: 選取規則依照選取的先後順序排序
: 以5個地區為例
: 若選取到位置為[1 2 3 4 5]
: 則對應到[3 3 4 1 3]的面積
: 但由於面積限制為10,則只會選取到[1 2 3]的位置
: 又若選取的順序為[1 2 4 3 5]
: 則對應的面積為[3 3 1 4 3]
: 依照選取規則,選到[1 2 4]時面積為7
: 可再繼續選取,但位置[3]對應的面積為4,若選取進去會超過10的限制
: 故往後選取,選擇面積為3的位置[5]
: 所以此次選取位置為[1 2 4 5]
: 請問此類問題編碼應如何設定?
: 煩請各位大大幫忙解決~謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.7.97
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):