vijos p1061(迎春舞会之三人组舞)

这道题.....感觉很难,主要是我觉得很难弄出方程式;

方程式为f[i,j]=min(f[i-2,j-1]+s[i,j],f[i-1,j]);

表示第j组到第i个人的残疾指数的最小值。

注意每次for 次数的时候,直接for 到 i div 3就可以了,之后就没有意义了。

 1 program P1061;  uses math;
 2 var
 3         i,j,k,l,m,n,x:longint;
 4         s:array[1..5500] of longint;
 5         f:array[-1..5500,0..2000] of longint;
 6 begin
 7         {assign(input,'haha.in');
 8         reset(input);}
 9         read(m,n);
10         for i:=n downto 1 do
11                 read(s[i]);
12         close(input);
13         for j:=1 to m do
14                 for i:=1 to n do
15                         f[i,j]:=maxlongint;
16         for i:=1 to n do
17                 for j:=1 to i div 3 do
18                         begin
19                         f[i,j]:=min(f[i-2,j-1]+sqr(s[i]-s[i-1]),f[i-1,j]);
20                         end;
21         x:=maxlongint;
22         for i:=1 to n do
23                       if x>f[i,m] then x:=f[i,m];
24         write(f[n,m]);
25 end.    

转载于:https://www.cnblogs.com/zyxx233/archive/2012/10/18/2728848.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值