讨论 / 求解啊啊啊啊啊
SunFrank 2011-10-25 05:20:00
点我顶贴 收藏 删除
const

mm=10000;

h=20;

type

arr=array[1..h]of longint;

var

m,n,i,j,k,l:longint;

a:array[1..4]of longint;

f:array[-100000..100000]of arr;

a1,a2:arr;

function t1(a,b:arr):arr; //相加

var i:longint;tmp:arr;

begin

fillchar(tmp,sizeof(tmp),0);

for i:=1 to h-1 do

begin

tmp[i]:=tmp[i]+a[i]+b[i];

tmp[i+1]:=tmp[i]div mm;

tmp[i]:=tmp[i]mod mm;

end;

exit(tmp);

end;

function t2(a:arr):arr; //乘二

var i:longint;tmp:arr;

begin

fillchar(tmp,sizeof(tmp),0);

for i:=1 to h-1 do

begin

tmp[i]:=tmp[i]+a[i]*2;

tmp[i+1]:=tmp[i]div mm;

tmp[i]:=tmp[i]mod mm;

end;

exit(tmp);

end;

function comp(a,b:arr):boolean;

var i:longint;

begin

for i:=h downto 1 do

if a[i]>b[i]then exit(true)

else if a[i]<b[i]then exit(false);

exit(true);

end;

begin

fillchar(f,sizeof(f),0);

read(n);

for i:=1 to 4 do

read(a[i]);

a[2]:=a[2]+a[3]+a[4]+a[4]; //a[2]=cost(全选+复制+粘贴*2)

a[3]:=a[4]; //a[3]=cost(粘贴)

fillchar(f,sizeof(f),0);

f[a[1]][1]:=1;

for i:=a[1]+1 to n do

begin

f[i]:=f[i-a[1]];

inc(f[i][1]);

a2:=t1(f[i-a[3]],a1); //粘贴剪切板后的结果

if comp(a2,f[i])then f[i]:=a2;

a2:=t2(f[i-a[2]]); //复制+粘贴剪切板后的结果

if comp(a2,f[i])then begin f[i]:=a2;a1:=f[i-a[2]];end;

end;

j:=h; while f[n][j]=0 do dec(j);

write(f[n][j]);

dec(j);

for i:=j downto 1 do

begin

if f[n][i]<1000 then write(0);

if f[n][i]<100 then write(0);

if f[n][i]<10 then write(0);

write(f[n][i]);

end;

writeln;

close(output);

end.

#1 xuketian@2011-10-25 01:53:00
回复 删除
你应该输出f数组中最大的那个而不一定是f[n]
#2 sunzhouyi@2011-10-25 05:20:00
回复 删除
回复 沙发xuketian 的帖子

LS是YYHS 徐可添?

查看更多回复
提交回复