动态规划,
用s[i] 记录前 i 类珍珠的总数。推出状态转移方程:
f[i] = min (f[i], (s[i] - s[j] + 10) * price[i] + f[j]);
贴个程序:
program poj1260;
type
node=record
sum,price:integer;
end;
var
k,m:longint;
n,i,j:integer;
a:array[1..100] of node;
s,f:array[0..100] of longint;
function min(p,q:longint):longint;
begin
if p<q then min:=p
else min:=q;
end;
begin
readln(m);
for k:=1 to m do
begin
fillchar(a,sizeof(a),0);
fillchar(s,sizeof(s),0);
fillchar(f,sizeof(f),0);
readln(n);
for i:=1 to n do
begin
readln(a[i].sum,a[i].price);
s[i]:=s[i-1]+a[i].sum;
end;
f[1]:=(a[1].sum+10)*a[1].price;
for i:=2 to n do
begin
f[i]:=maxlongint;
for j:=0 to i-1 do
f[i]:=min(f[i],f[j]+(s[i]-s[j]+10)*a[i].price);
end;
writeln(f[n]);
end;
end.