{
TASK:stairs
LANG:PASCAL
}
program stairs;

const
	MAXN					= 100;
	inf					= 9999999999.0;

type
	TStair					= record
		d, h				: Real;
	end;

var
	f, s					: Array [0 .. MAXN, 0 .. MAXN] of Real;
	done					: Array [0 .. MAXN, 0 .. MAXN] of Boolean;
	stair					: Array [1 .. MAXN] of TStair;
	n, k, i, j				: Integer;
	depth					: Real;

function solve(n, k: Integer): Real;
var
	i					: Integer;
	min					: Real;
begin
	if (done[n, k]) then 
		solve := f[n, k]
	else begin
		done[n, k] := True;
		if (k > n) then 
			f[n, k] := inf
		else if (k = n) then
			f[n, k] := 0.000000
		else begin
			min := inf;
			for i := n downto 1 do
				if (s[i, n] + solve(i-1, k-1) < min) then
					min := s[i, n] + f[i-1, k-1];
			f[n, k] := min;
		end;
		solve := f[n, k];
	end;
end;

begin
	readln(n, k);
	for i := 1 to n do
		readln(stair[i].h, stair[i].d);
	
	{ precalculating how much does it cost to fill stairs from i to j in s[i, j] }

	for i := 1 to n do begin
		s[i, i] := 0.000000;
		depth := stair[i].d;
		for j := i+1 to n do begin
			s[i, j] := s[i, j-1] + depth * stair[j].h;
			depth := depth + stair[j].d;
		end;
	end;

	FillChar(done, sizeof(done), False);
	f[0, 0] := 0.000000;
	done[0, 0] := True;
	writeln(solve(n, k):0:3);
end.