生活随笔
收集整理的這篇文章主要介紹了
2020牛客暑期多校训练营(第六场)H.Harmony Pairs 数位dp
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
傳送門
文章目錄
題意:
給你一個(gè)nnn,問(wèn)你有多少對(duì)0≤a≤b≤n0\le a\le b\le n0≤a≤b≤n滿足S(a)>S(b)S(a)>S(b)S(a)>S(b)。其中S(a)S(a)S(a)表示aaa的十進(jìn)制各位數(shù)之和。
思路:
顯然的數(shù)位dpdpdp,一般的數(shù)位dpdpdp都是維護(hù)一個(gè)數(shù),這個(gè)無(wú)非就是維護(hù)兩個(gè)數(shù),加一維狀態(tài)就好啦。
定義f[pos][c][flag1][flag2]f[pos][c][flag1][flag2]f[pos][c][flag1][flag2]表示到了第pospospos位,aaa與bbb的差值為ccc,flag1flag1flag1表示bbb是否能取到上界,flag2flag2flag2表示aaa是否能取到上界。
讓后就是裸的數(shù)位dpdpdp辣,給差值加一個(gè)偏移量就好啦。
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std
;
typedef long long LL
;
typedef unsigned long long ULL
;
typedef pair
<int,int> PII
;const int N
=210,mod
=1e9+7,INF
=0x3f3f3f3f;
const double eps
=1e-6;string s
;
int a
[N
],tot
;
LL f
[210][2010][2][2];LL
dp(int pos
,int c
,int flag1
,int flag2
) {if(pos
==0) return c
>1000;if(f
[pos
][c
][flag1
][flag2
]!=-1) return f
[pos
][c
][flag1
][flag2
];LL ans
=0;int x
=flag1
? 9:a
[pos
];for(int i
=0;i
<=x
;i
++) {int y
=flag2
? 9:i
;for(int j
=0;j
<=y
;j
++) {ans
+=dp(pos
-1,c
+j
-i
,flag1
||i
<x
,flag2
||j
<y
);ans
%=mod
;}}return f
[pos
][c
][flag1
][flag2
]=ans
;
}LL
solve() {tot
=0;for(int i
=s
.length()-1;i
>=0;i
--) a
[++tot
]=s
[i
]-'0';return dp(tot
,1000,0,0);
}int main()
{
memset(f
,-1,sizeof(f
));cin
>>s
;printf("%lld\n",solve());return 0;
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的2020牛客暑期多校训练营(第六场)H.Harmony Pairs 数位dp的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。