B. Grid Reconstruction codeforces 1816B

该问题是一个关于路径规划的问题,目标是在一个2*n的网格中,从(1,1)移动到(2,n),使得经过所有数字的交错和最大。通过分析,可以得出一种策略,即从起点开始,偶数行填充偶数,奇数行填充奇数,且数值交替增大,从而达到最大交错和。代码示例给出了具体的填充顺序和方法。
摘要由CSDN通过智能技术生成

https://codeforces.com/contest/1816/problem/B

题目大意:在一个2*n的网格中,每次移动可以向右移动1格,或者向下移动1格,从起点(1,1)要移动到终点(2,n),费用为经过的所有数字的交错和,要求在每个网格中填入1到2n的数字(每个数字出现且仅出现1次),使得所有可行路径的最小费用最大

n<=2<=1e5

思路:要想交错和最大,就要相邻数的差尽可能大,那么我们就在起点填上最大的数2n,因为n是偶数,所以终点一定是直接加在费用里的,就填次大的数然后相邻数都是最小的数既1,2,1的相邻数应该是当前剩下的最大数,既2n-2,2n-3,以此类推我们可以发现一种可行的构造即为第一行为12,2,10,8,4,6这样的大小交替的偶数,第二行是1,9,3,7,5,11这样除了终点以外大小交替的奇数

for t in range(int(input())):
    n=int(input())
    a=[2*n-i if i%2==0 else i+1 for i in range(n)]
    b=[i+1 if i%2==0 else 2*n-i-2 for i in range(n-1)]
    b.append(2*n-1)
    print(*a,*b)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timidcatt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值