高中OJ3514. 【NOIP2013模拟11.6B组】最小比例

因为N<=15,所以可以直接暴力求解。
先枚举哪些点要选,之后打一个Prim(或克鲁斯卡尔)算结果。
要注意比率相同时,要取字典序更小的。
代码:

var
        a:array[1..15] of longint;
        b:array[1..15,1..15] of longint;
        d:array[1..15] of longint;
        bz:array[1..15] of boolean;
        ans:array[1..15] of longint;
        bz2:array[1..15] of boolean;
        f:array[1..15] of longint;
        n,m,i,j,min2,min3,min4:longint;
        min,tot,s:real;

procedure dg(t,sum,last:longint);
var
        i,j,l:longint;
begin
        if t>m then
        begin
                fillchar(bz2,sizeof(bz2),false);

                s:=0;
                f[1]:=d[1];
                bz2[d[1]]:=true;

                for l:=1 to m-1 do
                begin
                        min2:=maxlongint;

                        for i:=1 to l do
                        begin

                        for j:=1 to m do
                        if (f[i]<>d[j]) and (bz[d[j]]=true) and (bz2[d[j]]=false) then
                        begin
                                if b[f[i],d[j]]<min2 then
                                begin
                                        min2:=b[f[i],d[j]];
                                        min3:=f[i];
                                        min4:=d[j];
                                end;
                        end;

                        end;

                        if min2<maxlongint then
                        begin
                                bz2[min4]:=true;

                                s:=s+min2;
                                f[l+1]:=min4;
                        end;

                end;

                s:=s/tot;

                if s<min then
                begin
                        min:=s;
                        ans:=d;
                end
                else
                if s=min then
                begin
                        for i:=1 to m do
                        if ans[i]<d[i] then
                        exit;

                        ans:=d;
                end;

                exit;
        end;

        for i:=last+1 to n-sum do
        begin
                d[t]:=i;
                bz[i]:=true;
                tot:=tot+a[i];

                dg(t+1,sum-1,i);

                tot:=tot-a[i];
                bz[i]:=false;
        end;
end;

begin
        assign(Input,'ratio.in'); reset(Input);
        assign(Output,'ratio.out'); rewrite(Output);

        readln(n,m);

        for i:=1 to n do
        read(a[i]);

        for i:=1 to n do
                for j:=1 to n do
                read(b[i,j]);

        min:=maxlongint;
        dg(1,m-1,0);

        for i:=1 to m do
        write(ans[i],' ');
        writeln;

        close(Input); close(Output);
end.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
hustoj.iso 是一个软件系统镜像文件。Hustoj是一个开源的在线评测系统,它被广泛应用于大学和高中的程序设计教学中。该系统的目标是提供一个方便使用的在线评测和训练环境,使学生能够提交他们的程序代码,并获得即时的评测结果。 hustoj.iso 是Hustoj的系统镜像文件,可以用来部署Hustoj系统。通过将hustoj.iso 文件安装到服务器上,就可以建立一个运行Hustoj系统的评测服务器。用户可以通过web界面访问该服务器,并提交自己的程序代码进行评测。 hustoj.iso 是一个基于Ubuntu操作系统的镜像文件。它集成了所有Hustoj系统所需要的软件和依赖项,并进行了预配置,使得安装和部署变得更加简单。用户只需要将hustoj.iso文件写入到U盘或光盘中,然后引导服务器从U盘或光盘启动,就可以开始安装Hustoj系统了。 使用hustoj.iso 部署Hustoj系统,可以为学生提供一个良好的在线评测环境,帮助他们进行程序设计的学习和训练。学生可以在该系统中提交自己的程序代码,并获得详尽的评测结果,包括运行时间、内存消耗、错误信息等等。同时,Hustoj还具有包括代码分享、竞赛织等其他功能,能够满足不同需求的学生。 总之,hustoj.iso 是一个用于部署Hustoj系统的镜像文件,通过安装hustoj.iso,可以搭建一个功能完善、易用的在线评测环境,为程序设计学习提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值