リンク:https://ac.nowcoder.com/acm/problem/21302
出典:牛オフネットワーク
タイトル説明
あなたは長さ50の数値文字列を与えるために、あなたはデジタルのシーケンスが割り切れるかもしれどのように多くのサブ尋ねる
の答えを法1E9 + 7
の答えを法1E9 + 7
説明を入力します。
50未満の長さに等しい数からなる文字列を入力し
出力説明:
整数出力
具体的なアイデア:
DP残りはjは数あるCouchuことができる前に[i] [j]は、i番目の文字を表し、
ACコード:
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3位LL定義長い 長い 4位INF定義0x3f3f3f3f 5 CONST INT MAXN = 2E5 + 100 。 6 のconst int型 MOD = 1E9 + 7 。 7 チャーSTR [MAXN]。 8 LL DP [MAXN] [ 10 ]。 9 INT メイン() 10 { 11 のscanf(" %sの"、STR + 1 )。 12 INTLEN = strlenを(STR + 1 )。 13 int型 TMP = 0 。 14 のためには、(int型 i = 1 ; iは= LEN <; iは++ ) 15 { 16 DPを[I] [(STR [I] - ' 0 ')%3 ] = 1 。 17 のために(INT J = 0 ; J < 3 ; J ++ ) 18 { 19 DP [I] [J] + = DP [I- 1 ] [J]。 20 DP [I] [J]%= MOD。 21 DP [I] [J] + DP = [I- 1 ] [(J + 15 - (STR [I] - ' 0 '))%3。]; //相補的なことに留意すべきである 22である DP [I] [J 】%= MODを、 23である } 24 // COUT I << << ENDL; 25 // のための(INT J = 0; J <3; J ++){ 26である // COUT J << << "" << DP [ I] [J] << ENDL; 27 // } 28 } 29 // ; I << << ENDL COUT 30 // のための(INT J = 0; J <3; J ++){ 31である // coutの<< J <<」「<< DP [I] [J] <<てendl; 32 // } 33 のprintf(" %LLDする\ n "、DP [LEN] [ 0 ])。 34 リターン 0 。 35 }