Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <queue>#include <set>#include <map>#include <algorithm>#include <string>#include <functional>using namespace std;#define MOD 1000000007typedef long long ll;void dfs(vector<int> &a, ll target, int cur, ll& ret){if (target <= 0) return;if (cur == a.size() - 1){int count = 0;while (target){++count;target /= 10;}if (a[cur] == count)ret = (ret + 1) % MOD;return;}ll curNum = 1;for (int j = 1; j < a[cur]; ++j)curNum = curNum * 10;int top = curNum * 10 - 1;while (curNum <= top){if (target - curNum <= 0) break;dfs(a, target - curNum, cur + 1, ret);