#include#include #include #define int long longusing namespace std;typedef long long ll;int a,b,ans[3][10],dp[20][2],add[20][2][10],shu[20],now;inline void input(ll &x){ ll ans=0,f=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9'){ ans=ans*10+c-48; c=getchar(); } x=ans*f;}inline void output(ll x){ if(x<0)x=-x,putchar('-'); if(x>9)output(x/10); putchar(x%10+48);}inline void writeln(ll x){ output(x); putchar('\n');}inline int dfs(int len,int limit,int have){ if(len==0)return 1; if(!limit&&dp[len][have]){ //cout< <<' '< <<' '< <<' '< <
记得记忆化搜索。
(把<=9打成<9了调了半天QwQ) 双倍经验:P4999 烦人的数学作业#include#include #include #define int long longusing namespace std;typedef long long ll;int a,b,ans[3][10],dp[20][2],add[20][2][10],shu[20],now;inline void input(ll &x){ ll ans=0,f=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9'){ ans=ans*10+c-48; c=getchar(); } x=ans*f;}inline void output(ll x){ if(x<0)x=-x,putchar('-'); if(x>9)output(x/10); putchar(x%10+48);}inline void writeln(ll x){ output(x); putchar('\n');}inline int dfs(int len,int limit,int have){ if(len==0)return 1; if(!limit&&dp[len][have]){ //cout< <<' '< <<' '< <<' '< <
注意:
for(int i=0;i<=9;i++){ out+=i*((ans[2][i]-ans[1][i])%ll(1e9+7)); out%=ll(1e9+7); }
有两处模,注意到了吗!
这个要注意!