--這個演算法得以實現,主要得到 newkid 和 nyfor 兩位大哥的幫助
declare
type test_t is table of vw_money%rowtype index by binary_integer;
res test_t;
l_row binary_integer:=1;
sums number;
cal varchar2(1000);
seq varchar2(1000);
j number;
lv_result number;
lv_target number := 10; --- 目標
lv_diff number := 1; --- 允許誤差
lv_cal varchar2(1000);
lv_seq varchar2(1000);
lv_close number;
begin
select *
bulk collect into res
from vw_money;
--dbms_output.put_line(res.count);
lv_result := null;
lv_close := null;
for i in res.first .. 2**res.last-1 loop
sums:=0;
seq:='';
cal:='';
j:=1;
while j<=res.count and res(j).pow<=i loop
if (bitand(i,res(j).pow) <> 0) then -- 2的冪事先算好了
sums:=sums+res(j).amount;
cal:=cal||res(j).amount||'+';
seq:=seq||res(j).id||',';
if sums - lv_target >= abs(lv_result - lv_target) or sums - lv_target>lv_diff then ---- 已經有更接近的答案或誤差超出範圍
exit;
end if;
end if;
j:=j+1;
end loop;
if abs(sums - lv_target)<=lv_diff and (lv_result is null or abs(sums - lv_target) < abs(lv_result - lv_target)) then
lv_result := sums;
lv_cal := cal;
lv_seq := seq;
elsif lv_result is null and sums - lv_target>lv_diff and (lv_close is null or sumslv_close := sums;
lv_cal := cal;
lv_seq := seq;
end if;
if lv_result = lv_target then
exit;
end if;
end loop;
if lv_result is null then
if lv_close is null then
dbms_output.put_line('不存在符合要求的答案');
else
lv_cal:=substr(lv_cal,1,length(lv_cal)-1)||'-'||(lv_close-lv_target);
lv_seq:=substr(lv_seq,1,length(lv_seq)-1);
dbms_output.put_line('結果是:'||lv_cal||'='||lv_target);
dbms_output.put_line('序列是:'||lv_seq);
end if;
else
lv_cal:=substr(lv_cal,1,length(lv_cal)-1);
lv_seq:=substr(lv_seq,1,length(lv_seq)-1);
dbms_output.put_line('結果是:'||lv_cal||'='||lv_result);
dbms_output.put_line('序列是:'||lv_seq);
end if;
end;
揹包問題 單詞拆分
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。示例 示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返回 true 因為 leetcode 可以被拆分成 leet co...
1353 揹包問題(貪心 可拆分)
題目描述 現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 100 如果給你乙個揹包它能容納的重量為m 10 m 200 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。輸入第一行輸入乙個正整數n 1 n 5 表示有n組測試資料 隨後有n測試...
0 1揹包問題(不可拆分問題)
假期 2020.01 180 1揹包問題是乙個經典的np hard組合優化問題,現實生活中的很多問題都可以以它為模型。本博文從動態規劃的角度進行問題的分析,分析了0 1揹包問題的數學模型,刻劃了最優解的結構特徵,建立了求最優值的遞迴關係式。0 1揹包問題一般描述為 給定n種物品和乙個揹包。物品i的重...