• 天平


    有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。(距离小于15,重量小于25,钩子和钩码都少于20个)

    其中可以把天枰看做一个以x0点作为平衡点的横轴。

    别看数据小,搜索只能过3个点,那方案数巨多无比,要用int64。

    定义平衡度:当前所挂砝码分别乘其坐标的和,很明显平衡度=0时满足条件。

    用f[i,j]表示当前挂到第i个钩子,平衡度为j的方案数,f[i,j]=xigema{f[i-1,k-x[k]*y[i]]},y记坐标,x记重量。

     

    View Code
     1 program balance(input,output);
     2 const
     3    maxw    = 2000;
     4 var
     5    x,y      : array[0..25] of longint;
     6    f      : array[0..25,-maxw..maxw+1000] of int64;
     7    n,m      : longint;
     8 procedure init;
     9 var
    10    i : longint;
    11 begin
    12    readln(m,n);
    13    for i:=1 to m do
    14       read(x[i]);
    15    for i:=1 to n do
    16       read(y[i]);
    17 end; { init }
    18 procedure main;
    19 var
    20    i,j,k : longint;
    21 begin
    22    fillchar(f,sizeof(f),0);
    23    f[0,0]:=1;
    24    for i:=1 to n do
    25       for j:=1 to m do
    26      for k:=-maxw to maxw do
    27         f[i,k+x[j]*y[i]]:=f[i,k+x[j]*y[i]]+f[i-1,k];
    28 end; { main }
    29 procedure print;
    30 begin
    31    writeln(f[n,0]);
    32 end; { print }
    33 begin
    34    assign(input,'balance.in');reset(input);
    35    assign(output,'balance.out');rewrite(output);
    36    init;
    37    main;
    38    print;
    39    close(input);
    40    close(output);
    41 end.

     

     

  • 相关阅读:
    课表
    hz评测机的迷惑操作
    联赛模拟测试16
    第四阶段总结
    震惊!OI居然还考天体运动
    简单题 题解
    P2340 [USACO03FALL]Cow Exhibition G题解
    题目分享I 三代目
    题目分享H 三代目
    题目分享G 三代目
  • 原文地址:https://www.cnblogs.com/neverforget/p/2450390.html
Copyright © 2020-2023  润新知