D. Pawn

原题链接

题解

不要犯复制黏贴的错误

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;
}


posted @   纯粹的  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示