牛牛想起飞【dp】

题意

题目链接:https://ac.nowcoder.com/acm/contest/9854/B

分析

定义状态: \(dp[i][j]\) 表示前 \(i\) 个数取模后结果是否可以为 \(j\),可以为 \(1\) ,否则为 \(0\)

代码


#include <bits/stdc++.h>

using namespace std;
const int N=1e5+5;
int a[N],b[N];
int dp[N][105];
int main()
{
    int n,y;
    scanf("%d%d",&n,&y);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
        scanf("%d",&b[i]);
    dp[0][0]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<y;j++)
        {
            if(dp[i-1][j])
            {
                dp[i][((j+a[i])%y+y)%y]=1;
                dp[i][((j+a[i]+b[i])%y+y)%y]=1;
                dp[i][((j+a[i]-b[i])%y+y)%y]=1;
            }
        }
    }
    for(int i=y-1;i>=0;i--)
    {
        if(dp[n][i]==1)
        {
            printf("%d\n",i);
            break;
        }
    }
    return 0;
}

posted @ 2021-01-01 15:00  xzx9  阅读(72)  评论(0编辑  收藏  举报