有一个问请你帮忙解决,问题是:
可分解项有
(1)A+B+C+D 28元
(2)A+B+C或A+B+D 23元
(3)B+C+D或A+C+D 19元
(4)A+C,A+D,B+C,C+D,A+B 15元如2A+2B+C+D分解成
一种方法:A+B+C+D、A+B=28元+15元=43元
二种方法:A+B+C、A+B+D=23元+23元=46元当然我先第一种方法更便宜43元最小
请问有谁能帮我设计这个算法,我给他几百分,另还有给分。
可分解项有
(1)A+B+C+D 28元
(2)A+B+C或A+B+D 23元
(3)B+C+D或A+C+D 19元
(4)A+C,A+D,B+C,C+D,A+B 15元如2A+2B+C+D分解成
一种方法:A+B+C+D、A+B=28元+15元=43元
二种方法:A+B+C、A+B+D=23元+23元=46元当然我先第一种方法更便宜43元最小
请问有谁能帮我设计这个算法,我给他几百分,另还有给分。
解决方案 »
- 如何快速有效地判断一个TCP连接是否还有效?
- 一个对数组数的判断
- 关于QRChart的现实问题,这厢有礼
- 初次接触报表,请问怎样打印出表格?用什么控件?delphi6帮助没有啊!!
- 急需
- 怎样用html显示表里面的数据?
- 我编写的一个VCL控件,我想将它做成一个OCX控件。
- StringGrid怎样实现一个Cell里面换行显示?
- 快来下载!倾请奉送!delphi书籍!就在这里!
- QUICKREPORT在以设为自定义纸张不能在EPSON LQ1600上打印
- 【急】兄弟们帮忙啊,一个非常简单的CGI或Websnap连接Interbase的数据库应用在调试环境下可以运行,在IIS下运行就报连接数据库错。重分!
- 线程未定义?
-----------------------
请问:你是针对这个算式还是任意算式?
(1)A+B+C+D 28元
(2)A+B+C或A+B+D 23元
(3)B+C+D或A+C+D 19元
(4)A+B,A+C,A+D,B+C,B+D,C+D, 15元。
兄弟,我急、急、急呀!!!!!!!!!!!!!!!!!!
Mask : array [1..10] of Integer =($f,
$e, $d,
$7, $b,
$a, $9, $6, $3, $c);function GetVal(s: Integer): Integer;
begin
case s of
$f:
GetVal := 28;
$e, $d:
GetVal := 23;
$7, $b:
GetVal := 19;
$a, $9, $6, $3, $c:
GetVal := 15;
end;
end;var
i, k, j, p, m: Integer;
Sel: array [1..10] of Boolean;
Total: array [1..4] of Integer;
begin
for i := 1 to $3ff do
begin
k := $200;
for j := 1 to 10 do
begin
if i and k <> 0 then
Sel[j] := True
else
Sel[j] := False;
k := k shr 1;
end; FillChar(Total, 4 * SizeOf(Integer), 0);
for j := 1 to 10 do
if Sel[j] then
begin
k := $8;
for p := 1 to 4 do
begin
if Mask[j] and k <> 0 then
Inc(Total[p]);
k := k shr 1;
end;
end; if (Total[1] = 2) and (Total[2] = 2) and (Total[3] = 1) and (Total[4] = 1) then
begin
m := 0;
for j := 1 to 10 do
begin
if Sel[j] then
begin
k := $8;
for p := 1 to 4 do
begin
if Mask[j] and k <> 0 then
Write(Chr(p + Ord('A') -1));
k := k shr 1;
end;
Inc(m, GetVal(Mask[j]));
end;
Write(' ');
end;
Writeln(m);
end;
end;
end.程序中大量使用了位运算的办法。
数组Mask为原始的串,后四位分别表示ABCD,有1则表示选定。
运行结果为所有可能的情况: AD BC AB 45
ABC ABD 46
ABCD AB 43
要求其它表达式的排列方案,只需修改
if (Total[1] = 2) and (Total[2] = 2) and (Total[3] = 1) and (Total[4] = 1) then
行中的条件即可。
2A+2B+C+D
分解成
A+B+C+D,A,B
允許這樣分解麼?
(2)A+B+C或A+B+D 23元
(3)B+C+D或A+C+D 19元
(4)A+C,A+D,B+C,C+D,A+B 15元这几个式子不矛盾么?通过前两个可以得出C=D=5,则对(4)A=B=10,而对(3)A=B=9
晕
(2)A+B+C或A+B+D 23元
(3)B+C+D或A+C+D 19元
(4)A+C,A+D,B+C,C+D,A+B 15元这几个式子不矛盾么?通过前两个可以得出C=D=5,则对(4)A=B=10,而对(3)A=B=9
晕
----------------------------------------------------------------------------
没有矛盾啊,不同的组合价格不同而已能不能把不同组合看成一个整体,然后转化成背包问题???呵呵
不知道可不可行