题目链接:
https://codeforces.com/problemset/problem/1673/C
#include <iostream> //常用开头模板,保存在文档,下次直接用
#include <algorithm>
#include <cstring>
#define sx first
#define sy second
using namespace std;
typedef long long LL;
typedef pair<int,int>PII;
const int N=40010,mod=1e9+7;
int dx[]={1,-1,0,0}; //常用开头模板,保存在文档,下次直接用
int dy[]={0,0,1,-1};
int n,m;
int f[N];//存的为 价值恰好为i的方案数;
int pa[N];//palindromic;
void solve()//预处理回文数模板;
{
int t=0;
for(int i=1;i<=N;i++)
{
t=i;
int sum=0;
while(t)
{
sum*=10;
sum+=t%10;
t/=10;
}
if(i==sum)
pa[++n]=i;
}
}
int main()
{
int t;
cin>>t;
solve();
f[0]=1;//记得初始化,不然方案数全为0;
//为了让f[1]有值;
for(int i=1;i<=n;i++)
{
for(int j=pa[i];j<=4*1e4;j++)
{
f[j]=(f[j]+f[j-pa[i]])%mod;
//f[1]=f[1]+f[0] =0+1;
}
}
while(t--)//输出相应值 方案数;
{
cin>>m;
cout<<f[m]<<endl;
}
return 0;
}