2016.08.19【初中部 NOIP普及组 】模拟赛

这次比赛我们C组的有点翻车的感觉,都被许多蒟蒻超了过去~~


主要是第一题坑我几何不好,其他题目都发挥算比较正常吧 ORZ~


第一题很明显一个智障的几何问题,具体怎么做,我想连我都懂了大家不会不懂吧?实在不懂就去看看小地球吧


第二题第三题是爆搜


至于第四题,听说正解是状压DP,但是我用我的爆搜加一个小小的剪枝都过了,而且还比状压DP跑得快,具体我是怎么做的呢?首先,需要一个时间超限40分的爆搜程序,在深搜的前面加上一条语句:  if s+(n-y)*mina>=min then exit;  s表示当前的值,n表示有n个人,y表示当前已经传递了y个人,mina表示输入二维数组的最小值,这条语句的意思就是说:如果当前的值+剩下数的值和(我们可以假设剩下数都是最优的最小值)还要大于最小值就退出


宇林神犇这题是用dfs错误的记忆化,由于数据水所以过了,而我的答案肯定是对的,而且还比他跑得快


第四题参考代码:

var     n,i,j,min,mina:longint;
        a:array[1..16,1..16]of longint;
        b:array[1..16]of longint;
procedure dfs(x,y,s:longint);
var     i:longint;
begin
        if s+(n-y)*mina>=min then exit;
        if y=n then
        begin
                min:=s;
                exit;
        end;
        for i:=1 to n do
                if b[i]=0 then
                begin
                        b[i]:=1;
                        dfs(i,y+1,s+a[x,i]);
                        b[i]:=0;
                end;
end;
begin
        readln(n);
        mina:=maxlongint;
        for i:=1 to n do
                for j:=1 to n do
                begin
                        read(a[i,j]);
                        if (a[i,j]<>-1)and(a[i,j]<mina)then mina:=a[i,j];
                end;
        min:=maxlongint;
        for i:=1 to n do
        begin
                fillchar(b,sizeof(b),0);
                b[i]:=1;
                dfs(i,1,0);
        end;
        writeln(min);
end.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值