首页 > 其他分享 >D. Pawn

D. Pawn

时间:2024-07-10 12:09:00浏览次数:5  
标签:Pawn int mo ans ll dp 105

原题链接

题解

不要犯复制黏贴的错误

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct op
{
    ll id,len;
};

ll a[105][105];

ll dp[105][105][15];
char mo[105][105][15];
void solve()
{
    memset(dp,-1,sizeof dp);
    int n,m,k;
    cin>>n>>m>>k;
    k++;
    for(int i=1;i<=n;i++)
    {
        string s;
        cin>>s;
        for(int j=0;s[j];j++)
        {
            a[i][j+1]=s[j]-'0';
        }
    }

    for(int i=1;i<=m;i++) dp[n][i][a[n][i]%k]=a[n][i];

    for(int i=n-1;i>=1;i--)
    {
        for(int l=0;l<k;l++)
        {
            if(dp[i+1][2][l]!=-1)
            {
                int now=(l+a[i][1])%k;
                dp[i][1][now]=dp[i+1][2][l]+a[i][1];
                mo[i][1][now]='L';
            }
            if(dp[i+1][m-1][l]!=-1)
            {
                int now=(l+a[i][m])%k;
                dp[i][m][now]=dp[i+1][m-1][l]+a[i][m];
                mo[i][m][now]='R';
            }
        }

        for(int j=2;j<m;j++)
        {
            for(int l=0;l<k;l++)
            {
                int from=(l-a[i][j]+k*20)%k;

                if(dp[i+1][j-1][from]!=-1&&dp[i+1][j+1][from]!=-1)
                {
                    if(dp[i+1][j-1][from]>dp[i+1][j+1][from])
                    {
                        dp[i][j][l]=dp[i+1][j-1][from]+a[i][j];
                        mo[i][j][l]='R';
                    }
                    else
                    {
                        dp[i][j][l]=dp[i+1][j+1][from]+a[i][j];
                        mo[i][j][l]='L';
                    }
                }
                else if(dp[i+1][j-1][from]!=-1)
                {
                        dp[i][j][l]=dp[i+1][j-1][from]+a[i][j];
                        mo[i][j][l]='R';
                }
                else if(dp[i+1][j+1][from]!=-1)
                {
                        dp[i][j][l]=dp[i+1][j+1][from]+a[i][j];
                        mo[i][j][l]='L';
                }
            }
        }
    }
    int ans=-1,id=0;
    for(int i=1;i<=m;i++)
    {
        if(dp[1][i][0]>ans)
        {
            ans=dp[1][i][0];
            id=i;
        }
    }
    if(ans!=-1)cout<<ans<<'\n';
    else
    {
        cout<<"-1\n";
        return ;
    }
    string str;
    int sheng=0;
    for(int i=1;i<n;i++)
    {
        char c=mo[i][id][sheng];
        str=c+str;

        sheng=(sheng-a[i][id]+k*20)%k;
        if(c=='L') id++;
        else id--;
    }

    cout<<id<<'\n';
    cout<<str;
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    ll t=1;
    while(t--) solve();
    return 0;
}


标签:Pawn,int,mo,ans,ll,dp,105
From: https://www.cnblogs.com/pure4knowledge/p/18293779

相关文章

  • twisted spawnProcess
     reactor.spawnProcess 是 Twisted 框架中用于创建新进程的方法。 以下是对其参数的一些解释: pp:这通常是一个实现了 IProcessProtocol 接口的对象,用于处理与新创建进程的交互。sys.executable:指定要执行的程序,这里使用了Python解释器自身。args:一个列表,包含要传......
  • 虚幻中实现本地双人的输入设备分别控制需要的Pawn
    想要实现双人成行游戏中的双输入设备(双输入设备指的是一个键鼠和一个手柄,或者两个手柄)分别控制玩家1和玩家2,同时可以动态插拔设备切换对应的Pawn的控制权;本文是对探索并实现此功能的一个解决思路记录。1、前期准备和知识点梳理1.1本地多玩家LocalPlayer平常我们运行游戏的......
  • mit6.828笔记 - lab5(上)- Spawn and Shell
    SpawningProcess有了文件系统了,我们终于可以方便地读取磁盘中的文件了。到目前为止,我们创建进程的方法一直都是在编译内核的时候将程序链接到数据段,在i386_init通过ENV_CREATE宏创建。现在我们应该考虑通过文件系统直接将用户程序从硬盘中读取出来,spawn就是这样的东西。s......
  • Electron Mac 打包报 Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT 解决
    ElectronMac打包报Error:Exitcode:ENOENT.spawn/usr/bin/pythonENOENT解决方法最近在开发的时候,发现打包Electron项目报错,错误的信息为Error:Exitcode:ENOENT.spawn/usr/bin/pythonENOENT报错原因是因为Mac升级到macOSventuraversion13.0.1后系统移除了......
  • [Rust] Intro Thread: 1. Thread with spawn
    Weuse spawntocreateanewthread:usestd::thread;usestd::time::Duration;fnmain(){thread::spawn(||{foriin1..10{println!("hinumber{}fromthespawnedthread!",i);thread::sleep(Duration::from......
  • 创建Vue项目,报错spawn yarn ENOENT
    1.使用vue创建项目的时候,报错Error:spawnyarnENOENT1.1用户自己设置了默认的包管理yarn1.2没有安装yarn解决方式1:打开C盘,在C盘里,打开users(用户名)的文件夹,然后在右侧搜索名为.vuerc的文件修改.vuerc文件解决方式2:没有安装yarn,那么直接输入命令npmin......
  • [AGC044E] Random Pawn题解
    [AGC044E]RandomPawn题解题目链接AtCoder原题链接Step1.拆环原问题是在环上的问题,考虑将环拆开变成链来处理。因此,我们需要找到一个点,使得操作越过这个点一定不优。令使\(a\)的值最大的位置的下标为\(maxp\)。容易发现,如果现在正处在\(maxp\)上,那么继续操作一定不可......
  • 多进程启动方法"spawn"、"fork"的选择
    官方指导 实践使用官方的例子:python版本为3.9.6根据官方的说法,3.8开始默认就是spawn了,而不是fork。frommultiprocessingimportProcess,Lockdeff(l,i):l.acquire()try:print('helloworld',i)finally:l.release()if__name__......
  • 前端 vue项目启动报错 spawn cmd ENOENT 的原因以及解决方案
    前端项目启动到一半的时候卡在跳转浏览器出现了这个问题 那么问题大概率就是你环境刚配置或者配置错了的问题,这个时候只需要找到我的电脑=>属性=>高级系统设置=>环境变量=>系统变量=>PATH环境=>双击进去=>添加环境变量=> 添加这俩个 C:\Windows\System......
  • 无涯教程-Erlang - spawn函数
    这用于创建新进程并对其进行初始化。spawn-语法spawn(Function)Function - 需要产生的功能。spawn-返回值此方法返回一个进程ID。-module(helloLearnfk).-export([start/0]).start()->spawn(fun()->server("Hello")end).server(Message)->io:f......