导弹防御[AHOI2002]

本文详细阐述了一种使用模拟算法解决特定问题的方法,通过枚举和递推计算,统计了不同长度的总数。该算法从第i号位置出发,考虑了长度为1到3的情况,并最终汇总了所有长度为3的统计结果。
算法:模拟
 
分析:用f[i,1]表示第i号位置上长度为1的总数,同理f[i,2]表示第i号位置上长度为2的总数……
      那么通过前面的枚举,f[i,k]=f[i,k]+f[j,k-1]{a[j]>a[i]}。

      最后把长度是三的统计一遍即可。

program ddfy;



const

 maxn=20000;



var

 a:array [0..maxn] of longint;

 f:array [0..maxn,1..3] of longint;

 n,i,j,k,ans:longint;



procedure init;

var

 i:longint;

begin

 ans:=0;

 readln(n);

 for i:=1 to n do

  begin

   read(a[i]);

   f[i,1]:=1;

  end;

end;



procedure main;

var

 i,j,k:longint;

begin

 for i:=2 to 3 do

  begin

   for j:=2 to n do

    begin

     for k:=1 to j-1 do if a[k]>a[j] then inc(f[j,i],f[k,i-1]);

    end;

  end;

 for i:=1 to n do inc(ans,f[i,3]);

end;



begin

 assign(input,'ddfy.in'); reset(input);

 assign(output,'ddfy.out'); rewrite(output);



 init;

 main;

 writeln(ans);



 close(input); close(output);

end.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值