寒假第三周

来写一下这周适合自己的题

第一题P3138Load Balancing S,这是一道求最大值中的最小值类的题目,这题直接看数据范围x,y<10^6,1<=n<=1000,如果直接对于x,y双重循环,直接10^12,绝对超时,所以应想到用n的二次方,离散化,把n对(x,y)转化成1~n,比如说(100,200),(50,300)这俩坐标转化为(2,1),(1,2)。这就是离散化。

sort(pos+1,pos+1+n,cmp1);//按照x的坐标从小到大排列
	for(int i=1;i<=n;i++)
	{
		x[pos[i].id]=i;
	}
	
sort(pos+1,pos+1+n,cmp2);//按照y的坐标从小到大排列
for(int i=1;i<=n;i++)
{
	y[pos[i].id]=i;
}

第二题P1535Cow Travelling S这题如果直接搜索,不用剪枝,会超时,直接10分,加个剪枝,在T次之内如果无法到达,直接return。

void dfs(int x,int y,int time)
{
    if(x==x2&&y==y2&&time==0)
        ans++;
    if(!time||abs(x-x2)+abs(y-y2)>time)
        return;
    for(int i=0;i<4;i++)
        if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]=='.')
            dfs(x+m_x[i],y+m_y[i],time-1);
}

第三题P2912Pasture Walking G这题我认为是路径搜索问题,根据数据大小可知,最多可以支持n^3,两条道路间是双向道路,Floyd算法+剪枝(在第三次循环前判断两地是否连接)。

就写这些吧,这周身体也好了,继续加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值