设dp[i][j]表示前i位数中,i位数的和为j时的所有情况。
转移的时候和普通的数位dp是一样转移的,但是如果你压缩了空间的话,就是用滚动数组的话,记录情况数就要多开一个变量来保存,
然后看看怎么排除前导0的情况。
如果产生的和值是j,然后前i - 1位产生的和值也是j,那么第i为就是前导0了。需要排除。
然后前n部分的和值的所有情况(需要排除前导0) * 后n部分的和值情况。就是答案。
#include #include #include #include #include #include #define IOS ios::sync_with_stdio(false)using namespace std;#define inf (0x3f3f3f3f)typedef long long int LL;#include #include #include #include #include
View Code