• C. Robot in a Hallway Educational Codeforces Round 133 (Rated for Div. 2)dp


    dp问题

    There is a grid, consisting of 22 rows and mm columns. The rows are numbered from 11 to 22 from top to bottom. The columns are numbered from 11 to mm from left to right.

    The robot starts in a cell (1,1)(1,1). In one second, it can perform either of two actions:

    • move into a cell adjacent by a side: up, right, down or left;
    • remain in the same cell.

    The robot is not allowed to move outside the grid.

    Initially, all cells, except for the cell (1,1)(1,1), are locked. Each cell (i,j)(i,j) contains a value ai,jai,j — the moment that this cell gets unlocked. The robot can only move into a cell (i,j)(i,j) if at least ai,jai,j seconds have passed before the move.

    The robot should visit all cells without entering any cell twice or more (cell (1,1)(1,1) is considered entered at the start). It can finish in any cell.

    What is the fastest the robot can achieve that?

    Input

    The first line contains a single integer tt (1≤t≤1041≤t≤104) — the number of testcases.

    The first line of each testcase contains a single integer mm (2≤m≤2⋅1052≤m≤2⋅105) — the number of columns of the grid.

    The ii-th of the next 22 lines contains mm integers ai,1,ai,2,…,ai,mai,1,ai,2,…,ai,m (0≤ai,j≤1090≤ai,j≤109) — the moment of time each cell gets unlocked. a1,1=0a1,1=0. If ai,j=0ai,j=0, then cell (i,j)(i,j) is unlocked from the start.

    The sum of mm over all testcases doesn't exceed 2⋅1052⋅105.

    Output

    For each testcase, print a single integer — the minimum amount of seconds that the robot can take to visit all cells without entering any cell twice or more.

    Example

    input

    Copy

    4
    3
    0 0 1
    4 3 2
    5
    0 4 8 12 16
    2 6 10 14 18
    4
    0 10 10 10
    10 10 10 10
    2
    0 0
    0 0
    

    output

    Copy

    5
    19
    17
    3
    
    1. #include
    2. using namespace std;
    3. const int N=200010;
    4. int a[4][N];
    5. int dp[4][N];
    6. int main()
    7. {
    8. int t,m,i,j;
    9. scanf("%d",&t);
    10. while(t--)
    11. {
    12. scanf("%d",&m);
    13. for(i=1;i<=2;i++)
    14. for(j=1;j<=m;j++)
    15. scanf("%d",&a[i][j]);
    16. a[1][1]=-1;
    17. dp[1][m+1]=dp[2][m+1]=1;
    18. for(j=m;j>=1;j--)
    19. for(i=1;i<=2;i++)
    20. dp[i][j]=max(max(a[i][j]+2*(m-j+1),a[3-i][j]+1),dp[i][j+1]+1);
    21. int ans=5e9;
    22. int num=0;
    23. for(j=1;j<=m;j++)
    24. {
    25. int k=3-(j%2+1);
    26. ans=min(ans,max(num,dp[k][j]));
    27. num=max(num,a[k][j]+2*(m-j+1));
    28. num=max(num,a[3-k][j]+2*(m-j+1)-1);
    29. }
    30. cout<
    31. }
    32. return 0;
    33. }

  • 相关阅读:
    2023届秋招内推码
    抽象工厂模式
    4-SpringBoot架构设计与实现原理-SpringBoot自定义starter
    生成式AI - 基于大模型的应用架构与方案
    开环控制(自动控制理论)
    芯洲升压电源,降压电源,DC-DC,汇总
    psycopg2离线安装
    操作系统(王道)
    前端适配笔记本缩放125%,150%导致页面错乱问题
    blender动画制作软件拓扑全流程
  • 原文地址:https://blog.csdn.net/weixin_62848089/article/details/126184218