【HDOJ 5389】 Zero Escape

3337 단어 dp
【HDOJ 5389】 Zero Escape
한 수의 수근은 바로 이 수가 9에서 나머지를 dp로 수열을 누적하는 과정에서 나타난 1~9의 방안수이다. 그리고 두 문에 9에서 나머지를 누적하고 9에서 나머지를 누적하는 결과 간의 비교에 따라 비교 결과에 따라 방안을 분배하면 된다.
코드는 다음과 같습니다.
#include <iostream>
#include <cstdio>
#include <cstring>
#define mod 258280327

using namespace std;

int dp[100001][10];

int main()
{
    int t,a,b,sum,i,j,n,id,ans;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d %d",&n,&a,&b);
        memset(dp,0,sizeof(dp));
        sum = ans = 0;
        for(i = 1; i <= n; ++i)
        {
            scanf("%d",&id);
            sum = sum+id;
            for(j = 1; j <= 9; ++j)
            {
                dp[i][j] = (dp[i][j] + dp[i-1][j])%mod;
                if(dp[i-1][j]) dp[i][(j+id-1)%9+1] = (dp[i][(j+id-1)%9+1] + dp[i-1][j])%mod;
            }
            dp[i][(id-1)%9+1] = (dp[i][(id-1)%9+1]+1)%mod;
        }
        sum = (sum-1)%9+1;
        if(sum == (a+b-1)%9+1)//              
        {
            ans = ans+dp[n][a];
            if(sum == a) ans--;
        }
        if(sum == a) ans++;//          
        if(sum == b) ans++;
        printf("%d
"
,ans%mod); } return 0; }

좋은 웹페이지 즐겨찾기