题目:
作者思路:dp,dp,dp!!!
f[j,k]:=min(f[j-1,k]+a[j]+b[j]i,f[j-1,k-1]+b[j](i-k));
初值:f[j,0]:=f[j-1,0]+a[j]+b[j]*i;
代码:
var a,b:array[-1..51] of longint;f:array[-1..51,-1..51] of longint;i,j,k,n,t,h:longint;
function min(a,b:longint):longint;
beginif a>b then exit(b) else exit(a);
end;
beginread(n,h);for i:=1 to n do read(a[i]);for i:=1 to n do read(b[i]);for i:=1 to n-1 dofor j:=i+1 to n doif b[i]>b[j] thenbegint:=a[i]; a[i]:=a[j]; a[j]:=t;t:=b[i]; b[i]:=b[j]; b[j]:=t;end;for i:=0 to n dobeginfor j:=1 to n dofor k:=1 to i do f[j,k]:=maxlongint div 10;for j:=1 to n do f[j,0]:=f[j-1,0]+a[j]+b[j]*i;for j:=1 to n dofor k:=1 to i dof[j,k]:=min(f[j-1,k]+a[j]+b[j]*i,f[j-1,k-1]+b[j]*(i-k));if f[n,i]<=h thenbeginwrite(i);halt;end;end;write(-1);
end.
本文发布于:2024-01-29 18:17:03,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170652342517355.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |