Fragrant numbers【DP打表】

题目链接



题意:用无限长的“1145141919”经过加、乘、括号、直接组成数字这四类方法用最短的前缀组成规定的数字。

  首先,用dfs爆搜来进行初步估算,可以看出答案不会超过11,或者用穷举答案来看,如果存在非“3、7”的“-1”项,说明答案错了,扩大来看就可以了。

  于是,我们就可以推个dp来进行打表了,我们用dp[i][j][k]表示,1 \leq i \leq 11,1 \leq j \leq 11, 1 \leq k\leq 5000来表示区间[i, j]中,是否可以组成权值k的答案,然后我们推这样的一个区间dp就可以了。

打表程序:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
int a[] = {0, 1, 1, 4, 5, 1, 4, 1, 9, 1, 9, 1, 1, 4, 5, 1};
bool dp[14][14][5007] = {false};
inline bool check(int x) { return x <= 5000 && x >= 0; }
inline int Merge(int l, int r) { if(r - l > 4) return INF; int ans = 0; for(int i=l; i<=r; i++) ans = ans * 10 + a[i]; return ans; }
void solve()
{
    dp[1][1][a[1]] = true;
    for(int i=2; i<=12; i++)
    {
        dp[i][i][a[i]] = true;
        for(int j=i - 1; j >= 1; j--)
        {
            if(check(Merge(j, i))) dp[j][i][Merge(j, i)] = true;
            for(int k=j; k<i; k++)
            {
                for(int x=1; x<=5000; x++)
                {
                    for(int y=1; y<=5000; y++)
                    {
                        if(check(x + y) && !dp[j][i][x + y])
                            dp[j][i][x + y] = dp[j][k][x] & dp[k + 1][i][y];
                        if(check(x * y) && !dp[j][i][x * y])
                            dp[j][i][x * y] = dp[j][k][x] & dp[k + 1][i][y];
                    }
                }
            }
        }
    }
}
int main()
{
    freopen("biao.out", "w", stdout);
    solve();
    printf("1");
    for(int i=2; i<=5000; i++)
    {
        int ans = -1;
        for(int j=2; j<=12; j++) if(dp[1][j][i]) { ans = j; break; }
        printf(", %d", ans);
    }
    return 0;
}

答案程序:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
int a[] = {1, 2, -1, 3, 3, 3, -1, 3, 4, 4, 2, 5, 4, 3, 3, 6, 6, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 6, 6, 4, 4, 5, 6, 6, 5, 5, 6, 6, 6, 4, 5, 5, 7, 3, 4, 4, 4, 5, 4, 5, 6, 6, 6, 6, 5, 4, 5, 6, 5, 6, 6, 7, 6, 6, 5, 5, 7, 6, 6, 4, 4, 5, 7, 6, 4, 5, 6, 6, 6, 6, 6, 6, 7, 5, 5, 6, 6, 6, 6, 4, 5, 5, 7, 6, 5, 6, 6, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 5, 6, 7, 6, 3, 7, 7, 7, 6, 4, 5, 6, 7, 6, 6, 6, 6, 6, 6, 7, 6, 7, 7, 6, 6, 6, 7, 6, 6, 6, 6, 6, 7, 6, 6, 4, 4, 5, 6, 6, 6, 6, 6, 7, 6, 6, 7, 8, 7, 6, 6, 7, 7, 7, 6, 5, 7, 7, 6, 6, 7, 7, 7, 8, 7, 7, 8, 8, 8, 8, 6, 6, 6, 7, 6, 6, 6, 7, 6, 6, 7, 6, 6, 7, 7, 6, 6, 7, 8, 7, 6, 7, 7, 8, 5, 5, 5, 8, 6, 6, 6, 7, 6, 7, 7, 5, 7, 8, 6, 6, 4, 5, 6, 7, 6, 6, 6, 6, 6, 7, 6, 5, 7, 8, 6, 6, 6, 7, 8, 8, 7, 7, 8, 8, 8, 6, 7, 7, 6, 7, 7, 7, 6, 6, 7, 5, 5, 8, 8, 6, 6, 6, 7, 7, 5, 7, 6, 6, 6, 7, 7, 7, 7, 8, 8, 6, 6, 7, 8, 8, 6, 6, 6, 7, 6, 6, 7, 7, 6, 7, 7, 6, 7, 8, 6, 6, 7, 7, 8, 7, 6, 7, 7, 8, 6, 7, 5, 8, 6, 7, 6, 7, 8, 8, 8, 7, 7, 8, 6, 6, 7, 8, 7, 8, 7, 7, 7, 8, 8, 8, 6, 7, 8, 8, 8, 8, 6, 6, 7, 8, 6, 7, 8, 8, 8, 8, 8, 7, 8, 8, 6, 6, 7, 9, 8, 6, 7, 8, 8, 8, 6, 7, 7, 8, 6, 7, 8, 8, 6, 7, 7, 7, 7, 8, 6, 6, 7, 8, 7, 7, 6, 7, 8, 8, 8, 7, 8, 8, 8, 7, 7, 8, 8, 8, 8, 8, 6, 7, 8, 8, 6, 7, 8, 8, 8, 8, 8, 7, 5, 8, 7, 7, 6, 7, 8, 8, 6, 7, 7, 8, 6, 7, 8, 8, 8, 7, 7, 8, 7, 8, 8, 8, 8, 8, 6, 7, 8, 8, 8, 8, 6, 7, 7, 8, 8, 8, 8, 9, 7, 7, 6, 5, 5, 5, 8, 6, 6, 6, 7, 8, 7, 7, 5, 8, 8, 7, 6, 7, 8, 8, 8, 8, 8, 8, 8, 7, 6, 7, 8, 8, 6, 7, 8, 8, 7, 8, 8, 8, 8, 8, 7, 8, 7, 7, 7, 4, 5, 8, 8, 6, 6, 7, 8, 7, 8, 8, 5, 8, 8, 6, 6, 7, 8, 8, 8, 8, 8, 8, 6, 6, 6, 7, 6, 7, 8, 8, 8, 8, 6, 6, 7, 8, 8, 7, 8, 8, 7, 7, 8, 6, 7, 8, 8, 8, 9, 8, 7, 7, 8, 8, 6, 7, 7, 8, 8, 8, 8, 9, 6, 7, 6, 7, 7, 8, 8, 8, 8, 8, 7, 8, 4, 5, 8, 8, 6, 6, 7, 8, 8, 8, 6, 6, 7, 8, 6, 6, 7, 8, 6, 7, 8, 8, 8, 8, 7, 6, 7, 8, 8, 8, 7, 8, 8, 8, 8, 5, 8, 8, 8, 6, 7, 7, 7, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 6, 7, 6, 6, 6, 7, 8, 8, 7, 8, 8, 8, 8, 6, 7, 8, 6, 6, 7, 8, 8, 6, 7, 8, 9, 8, 8, 8, 8, 8, 6, 7, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 9, 8, 7, 7, 7, 8, 8, 8, 8, 7, 8, 5, 8, 6, 7, 6, 7, 7, 7, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 7, 7, 7, 8, 7, 5, 5, 8, 8, 6, 6, 7, 8, 8, 8, 8, 6, 6, 7, 8, 8, 6, 7, 9, 9, 8, 7, 7, 8, 7, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 7, 8, 8, 9, 8, 8, 7, 7, 8, 8, 8, 8, 8, 8, 9, 8, 5, 8, 8, 8, 6, 6, 6, 7, 9, 8, 8, 8, 8, 8, 7, 7, 8, 9, 8, 6, 7, 8, 9, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 7, 7, 8, 8, 8, 8, 9, 8, 7, 8, 8, 9, 8, 8, 9, 9, 6, 7, 6, 6, 6, 7, 6, 6, 7, 8, 6, 6, 7, 6, 7, 8, 8, 7, 8, 8, 8, 8, 6, 7, 8, 8, 7, 7, 7, 8, 8, 8, 8, 7, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 9, 6, 7, 7, 7, 8, 8, 8, 8, 9, 7, 7, 7, 7, 8, 8, 8, 7, 8, 8, 8, 6, 7, 7, 7, 6, 7, 8, 8, 9, 8, 8, 7, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8, 5, 7, 9, 9, 6, 7, 9, 8, 6, 7, 7, 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 9, 8, 7, 8, 8, 7, 8, 8, 9, 8, 8, 8, 9, 8, 8, 8, 7, 8, 9, 8, 8, 8, 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 9, 8, 8, 6, 6, 7, 9, 7, 7, 7, 9, 8, 8, 8, 8, 8, 8, 6, 7, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 8, 9, 9, 6, 6, 7, 8, 6, 7, 6, 7, 9, 8, 7, 7, 9, 8, 8, 8, 6, 7, 7, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 6, 7, 8, 8, 8, 8, 6, 7, 8, 8, 8, 8, 8, 9, 8, 7, 7, 7, 9, 8, 8, 8, 8, 9, 8, 7, 8, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 8, 8, 7, 8, 9, 8, 8, 9, 8, 9, 6, 7, 8, 8, 8, 7, 8, 7, 8, 8, 8, 7, 9, 9, 8, 8, 8, 9, 9, 8, 8, 8, 8, 8, 9, 7, 8, 8, 8, 9, 8, 9, 8, 8, 8, 8, 8, 9, 10, 9, 6, 7, 9, 8, 7, 4, 5, 8, 8, 6, 6, 7, 8, 8, 8, 7, 9, 9, 8, 6, 7, 8, 9, 9, 8, 9, 8, 9, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 8, 9, 8, 8, 9, 10, 9, 8, 8, 8, 9, 8, 8, 8, 8, 9, 9, 9, 8, 9, 9, 10, 8, 8, 9, 10, 9, 8, 8, 8, 8, 8, 9, 8, 8, 9, 6, 7, 8, 9, 9, 9, 7, 7, 8, 8, 8, 8, 9, 10, 9, 8, 8, 9, 8, 8, 9, 9, 8, 8, 9, 10, 8, 8, 9, 10, 7, 9, 9, 10, 10, 9, 6, 7, 7, 8, 9, 8, 8, 8, 8, 7, 7, 7, 9, 10, 8, 7, 7, 9, 8, 8, 7, 9, 8, 9, 8, 8, 7, 8, 7, 7, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 7, 10, 9, 8, 9, 9, 9, 8, 9, 8, 7, 9, 8, 8, 8, 9, 8, 8, 7, 8, 8, 9, 10, 8, 8, 9, 8, 8, 8, 8, 8, 9, 8, 8, 8, 9, 8, 8, 8, 8, 8, 9, 8, 8, 9, 10, 9, 9, 7, 8, 8, 9, 10, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 8, 9, 9, 8, 9, 8, 9, 10, 9, 8, 9, 9, 8, 9, 9, 7, 9, 10, 9, 9, 9, 6, 7, 8, 8, 8, 9, 10, 9, 10, 8, 8, 7, 9, 10, 8, 8, 9, 9, 8, 8, 8, 8, 8, 9, 7, 7, 9, 10, 8, 8, 9, 8, 7, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9, 10, 8, 8, 8, 9, 9, 8, 8, 5, 5, 9, 10, 6, 6, 7, 8, 8, 8, 9, 10, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 8, 8, 7, 9, 9, 9, 8, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 7, 7, 8, 8, 8, 8, 8, 9, 8, 8, 8, 8, 9, 9, 9, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 9, 8, 8, 8, 8, 8, 8, 9, 9, 9, 8, 8, 9, 7, 8, 8, 8, 8, 9, 9, 9, 8, 8, 8, 8, 8, 8, 9, 9, 9, 8, 8, 9, 8, 7, 9, 10, 9, 9, 9, 10, 8, 9, 8, 9, 8, 9, 8, 8, 8, 9, 9, 9, 9, 9, 10, 9, 9, 8, 9, 9, 10, 10, 9, 8, 9, 9, 8, 9, 10, 10, 10, 10, 8, 8, 9, 10, 10, 8, 8, 8, 8, 9, 8, 9, 9, 10, 10, 9, 8, 8, 9, 10, 8, 8, 9, 10, 10, 8, 8, 8, 8, 9, 8, 8, 8, 9, 9, 9, 8, 9, 9, 8, 8, 8, 6, 7, 7, 9, 10, 10, 8, 8, 7, 8, 8, 8, 9, 10, 9, 8, 9, 8, 7, 8, 8, 8, 9, 10, 8, 8, 8, 8, 9, 9, 9, 10, 8, 8, 6, 7, 9, 10, 8, 9, 8, 8, 8, 8, 8, 9, 9, 10, 7, 7, 8, 8, 8, 8, 9, 9, 9, 8, 8, 8, 8, 8, 8, 9, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 9, 8, 9, 10, 8, 8, 8, 9, 9, 9, 8, 9, 10, 8, 9, 9, 7, 9, 9, 8, 9, 9, 8, 8, 9, 8, 9, 9, 9, 9, 9, 8, 9, 8, 8, 9, 9, 9, 9, 10, 8, 9, 8, 8, 8, 9, 8, 9, 9, 8, 9, 9, 9, 10, 8, 9, 9, 9, 8, 9, 9, 10, 9, 9, 9, 7, 9, 8, 9, 9, 9, 10, 8, 8, 8, 9, 9, 9, 8, 7, 8, 9, 10, 10, 10, 8, 9, 9, 8, 9, 10, 10, 10, 10, 8, 8, 8, 9, 6, 6, 6, 7, 6, 6, 7, 8, 6, 7, 8, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 9, 7, 8, 8, 9, 9, 10, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 7, 8, 8, 9, 8, 8, 8, 7, 8, 8, 8, 8, 9, 8, 9, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 10, 10, 8, 8, 8, 8, 9, 8, 7, 7, 7, 8, 7, 7, 7, 9, 8, 8, 8, 7, 8, 8, 8, 7, 8, 9, 8, 8, 8, 9, 8, 9, 8, 8, 9, 10, 8, 8, 8, 8, 9, 8, 8, 9, 9, 10, 9, 8, 8, 7, 7, 9, 9, 9, 7, 7, 8, 8, 8, 8, 8, 9, 9, 8, 8, 9, 8, 9, 9, 9, 10, 10, 8, 9, 9, 10, 9, 8, 9, 8, 9, 8, 8, 8, 8, 8, 8, 8, 9, 10, 7, 9, 9, 8, 8, 9, 7, 9, 8, 8, 9, 9, 6, 7, 8, 8, 6, 7, 8, 9, 9, 8, 8, 7, 9, 8, 8, 8, 8, 9, 8, 8, 8, 9, 8, 8, 8, 9, 9, 8, 9, 7, 9, 9, 10, 10, 8, 9, 8, 8, 8, 9, 9, 9, 9, 9, 6, 7, 8, 8, 9, 10, 6, 6, 7, 8, 8, 7, 8, 9, 9, 8, 7, 8, 9, 8, 6, 7, 7, 9, 8, 8, 7, 9, 8, 8, 8, 8, 6, 6, 6, 7, 7, 7, 7, 8, 9, 8, 8, 6, 7, 8, 8, 7, 8, 9, 10, 8, 8, 8, 9, 8, 8, 8, 8, 9, 8, 9, 8, 9, 8, 9, 8, 8, 8, 8, 8, 7, 7, 7, 8, 7, 8, 8, 9, 8, 8, 7, 7, 8, 8, 8, 8, 9, 8, 9, 8, 8, 8, 8, 9, 9, 8, 8, 9, 8, 8, 8, 8, 9, 9, 10, 9, 9, 8, 8, 8, 7, 9, 9, 9, 8, 9, 9, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 9, 10, 9, 9, 8, 9, 8, 9, 9, 10, 6, 7, 8, 8, 8, 8, 9, 10, 10, 7, 7, 9, 9, 10, 8, 8, 9, 9, 8, 8, 9, 9, 9, 8, 7, 9, 9, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 8, 8, 8, 9, 9, 8, 8, 8, 9, 8, 8, 8, 9, 8, 8, 9, 9, 9, 9, 8, 8, 9, 10, 8, 8, 9, 9, 10, 10, 9, 10, 8, 8, 8, 9, 5, 9, 10, 9, 6, 7, 8, 8, 8, 9, 8, 7, 7, 7, 8, 8, 7, 7, 9, 10, 8, 7, 7, 8, 8, 8, 8, 9, 10, 10, 8, 8, 9, 8, 9, 9, 6, 7, 9, 9, 6, 7, 8, 9, 6, 7, 8, 9, 10, 8, 8, 8, 7, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 9, 10, 9, 9, 9, 10, 10, 8, 8, 9, 9, 10, 9, 8, 9, 10, 8, 9, 10, 8, 8, 8, 9, 10, 9, 7, 9, 8, 8, 8, 8, 8, 9, 10, 8, 8, 9, 8, 8, 8, 7, 10, 7, 9, 8, 9, 8, 9, 8, 8, 9, 8, 9, 9, 9, 8, 9, 10, 9, 9, 9, 10, 9, 8, 8, 9, 10, 9, 9, 9, 10, 10, 10, 8, 9, 8, 9, 9, 9, 10, 9, 9, 7, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 9, 10, 9, 8, 9, 10, 8, 8, 8, 9, 10, 10, 9, 7, 6, 7, 8, 9, 9, 9, 9, 10, 8, 8, 8, 7, 8, 9, 10, 9, 10, 10, 10, 8, 8, 8, 9, 9, 9, 9, 10, 10, 8, 9, 8, 9, 9, 8, 9, 10, 9, 9, 9, 10, 9, 9, 10, 10, 7, 9, 9, 10, 9, 10, 8, 9, 10, 8, 9, 6, 7, 8, 9, 9, 7, 9, 10, 9, 8, 8, 7, 9, 10, 8, 9, 10, 10, 8, 8, 8, 9, 8, 9, 8, 8, 9, 9, 10, 9, 10, 10, 10, 9, 9, 9, 9, 9, 10, 9, 10, 10, 10, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 7, 8, 9, 10, 9, 9, 10, 10, 7, 8, 8, 9, 9, 10, 8, 9, 8, 8, 9, 9, 8, 9, 9, 10, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 10, 6, 6, 7, 10, 8, 7, 7, 9, 8, 8, 8, 8, 9, 8, 8, 8, 9, 9, 9, 8, 8, 8, 8, 9, 8, 9, 8, 9, 10, 10, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 9, 8, 9, 8, 8, 9, 8, 8, 8, 8, 8, 9, 10, 9, 9, 8, 8, 8, 9, 10, 9, 10, 9, 10, 8, 9, 9, 9, 8, 8, 9, 10, 10, 9, 8, 8, 9, 10, 9, 9, 8, 8, 8, 8, 8, 9, 9, 10, 8, 8, 9, 8, 8, 7, 7, 9, 8, 9, 8, 9, 10, 8, 8, 8, 9, 10, 8, 7, 7, 9, 10, 9, 8, 9, 10, 9, 8, 8, 9, 8, 9, 9, 9, 7, 9, 10, 9, 9, 8, 8, 8, 9, 8, 9, 7, 10, 10, 8, 8, 8, 9, 10, 9, 8, 9, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 9, 10, 9, 9, 9, 10, 9, 9, 6, 7, 9, 8, 9, 9, 9, 10, 9, 8, 8, 9, 9, 9, 7, 8, 8, 9, 10, 8, 9, 9, 10, 8, 8, 8, 9, 10, 9, 10, 9, 10, 9, 10, 9, 9, 8, 9, 9, 8, 9, 10, 10, 10, 9, 8, 9, 9, 10, 10, 9, 10, 10, 10, 8, 9, 10, 9, 8, 8, 9, 9, 10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 8, 8, 8, 9, 9, 9, 8, 9, 10, 9, 7, 7, 7, 10, 10, 10, 9, 9, 9, 8, 8, 7, 8, 9, 10, 8, 8, 9, 9, 10, 8, 8, 9, 10, 8, 9, 10, 10, 10, 7, 6, 7, 9, 10, 10, 7, 6, 6, 7, 8, 6, 7, 8, 9, 8, 8, 8, 8, 9, 8, 7, 7, 9, 8, 9, 8, 8, 9, 8, 8, 8, 9, 9, 10, 8, 9, 10, 10, 8, 9, 9, 10, 10, 10, 9, 10, 9, 10, 8, 9, 9, 10, 10, 10, 9, 9, 10, 9, 10, 10, 8, 7, 7, 9, 10, 9, 8, 9, 10, 10, 8, 8, 9, 10, 10, 8, 8, 9, 8, 9, 9, 10, 10, 10, 8, 9, 10, 9, 10, 10, 7, 7, 9, 10, 9, 8, 9, 9, 8, 8, 8, 9, 7, 10, 9, 9, 10, 10, 10, 9, 9, 7, 7, 10, 7, 10, 10, 10, 10, 10, 7, 8, 9, 8, 9, 9, 9, 10, 10, 8, 9, 9, 7, 8, 9, 10, 10, 10, 10, 10, 9, 8, 8, 9, 9, 10, 8, 8, 9, 10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 9, 10, 8, 9, 9, 10, 10, 10, 9, 8, 8, 9, 8, 7, 9, 10, 10, 10, 9, 9, 9, 8, 8, 9, 9, 9, 9, 9, 8, 9, 8, 9, 10, 10, 10, 9, 9, 10, 9, 9, 9, 9, 10, 9, 9, 10, 10, 10, 6, 7, 9, 10, 8, 9, 8, 8, 9, 8, 8, 9, 9, 9, 10, 7, 9, 9, 9, 8, 6, 7, 9, 10, 6, 7, 10, 9, 9, 8, 7, 7, 9, 8, 8, 9, 9, 10, 10, 8, 8, 9, 7, 8, 9, 9, 10, 10, 9, 9, 9, 8, 9, 10, 10, 10, 7, 9, 10, 10, 9, 10, 8, 8, 7, 8, 9, 10, 9, 9, 9, 10, 10, 8, 9, 9, 9, 9, 8, 9, 10, 10, 10, 10, 8, 9, 8, 9, 10, 10, 7, 8, 9, 10, 10, 9, 9, 9, 10, 8, 8, 9, 10, 10, 9, 9, 9, 10, 8, 9, 9, 9, 9, 10, 10, 9, 9, 10, 10, 8, 8, 9, 9, 10, 9, 9, 9, 9, 10, 10, 8, 9, 8, 9, 9, 8, 8, 9, 8, 9, 9, 9, 10, 10, 8, 9, 10, 9, 10, 10, 8, 8, 9, 10, 10, 9, 10, 10, 10, 10, 8, 8, 9, 8, 9, 9, 10, 11, 10, 10, 10, 10, 10, 10, 8, 9, 11, 11, 10, 10, 8, 9, 9, 10, 9, 9, 10, 9, 10, 8, 8, 8, 9, 10, 10, 9, 8, 9, 8, 9, 9, 9, 9, 10, 10, 10, 8, 8, 9, 10, 10, 9, 10, 10, 10, 9, 8, 8, 9, 10, 9, 10, 10, 10, 10, 8, 9, 9, 10, 8, 9, 9, 10, 10, 10, 10, 9, 10, 10, 10, 7, 9, 9, 10, 10, 10, 8, 9, 10, 8, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 8, 9, 8, 8, 8, 9, 10, 8, 8, 9, 10, 8, 9, 8, 9, 10, 8, 8, 9, 10, 8, 9, 9, 10, 9, 10, 10, 9, 10, 10, 8, 8, 8, 8, 9, 10, 10, 10, 8, 9, 9, 9, 8, 9, 10, 10, 9, 8, 8, 9, 9, 10, 9, 8, 9, 10, 8, 9, 9, 10, 9, 10, 9, 9, 8, 9, 9, 10, 10, 10, 10, 8, 8, 9, 8, 8, 8, 9, 10, 10, 9, 10, 9, 8, 8, 8, 9, 10, 10, 10, 10, 10, 7, 8, 8, 9, 10, 10, 10, 10, 10, 8, 9, 8, 8, 9, 10, 10, 10, 10, 9, 8, 8, 9, 10, 9, 7, 7, 9, 10, 10, 10, 8, 9, 10, 8, 8, 9, 9, 10, 8, 9, 10, 10, 10, 10, 10, 8, 8, 8, 9, 10, 9, 9, 10, 10, 10, 10, 8, 9, 10, 10, 8, 8, 9, 10, 10, 7, 10, 9, 10, 10, 10, 10, 10, 10, 8, 9, 8, 8, 8, 9, 8, 8, 9, 10, 8, 9, 9, 8, 9, 9, 8, 9, 9, 10, 9, 8, 8, 9, 10, 10, 8, 9, 10, 10, 10, 7, 7, 10, 9, 10, 10, 9, 10, 10, 8, 8, 9, 10, 10, 10, 10, 10, 8, 8, 9, 10, 10, 10, 10, 9, 8, 8, 9, 9, 10, 9, 10, 10, 10, 10, 9, 10, 10, 10, 8, 9, 10, 10, 10, 10, 7, 7, 8, 8, 9, 7, 9, 10, 10, 8, 8, 9, 10, 10, 8, 9, 10, 10, 9, 9, 10, 8, 9, 10, 10, 10, 10, 10, 10, 10, 8, 9, 9, 10, 10, 10, 10, 10, 6, 7, 7, 9, 10, 10, 10, 9, 9, 8, 8, 8, 9, 8, 9, 11, 10, 9, 8, 8, 8, 8, 9, 10, 11, 9, 9, 9, 9, 9, 10, 10, 8, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9, 9, 10, 9, 9, 9, 10, 9, 10, 10, 9, 9, 8, 9, 10, 7, 10, 10, 10, 10, 10, 9, 9, 9, 8, 9, 10, 10, 10, 8, 9, 9, 10, 10, 10, 10, 10, 9, 10, 7, 8, 8, 9, 10, 10, 8, 8, 8, 8, 8, 8, 9, 10, 10, 8, 9, 9, 8, 9, 9, 9, 10, 10, 10, 10, 10, 8, 9, 10, 9, 10, 10, 10, 8, 9, 9, 9, 10, 10, 10, 7, 9, 9, 10, 10, 10, 10, 10, 10, 8, 9, 9, 9, 8, 9, 9, 10, 10, 9, 8, 8, 9, 8, 9, 9, 9, 9, 9, 10, 8, 9, 8, 9, 9, 9, 9, 9, 9, 10, 10, 8, 7, 8, 9, 9, 9, 9, 9, 9, 7, 8, 8, 9, 9, 10, 9, 9, 8, 8, 8, 8, 9, 10, 8, 8, 9, 9, 8, 9, 8, 9, 9, 9, 10, 10, 9, 9, 9, 9, 9, 10, 10, 10, 10, 9, 9, 10, 10, 9, 9, 9, 9, 9, 9, 7, 9, 10, 8, 9, 9, 9, 9, 9, 8, 9, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 9, 9, 8, 9, 9, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 10, 9, 9, 9, 10, 9, 9, 10, 10, 10, 8, 9, 9, 10, 8, 8, 8, 9, 8, 9, 10, 10, 10, 10, 8, 8, 9, 9, 10, 7, 9, 9, 10, 10, 8, 9, 9, 10, 8, 9, 8, 9, 10, 10, 9, 9, 9, 9, 10, 8, 8, 9, 10, 10, 8, 9, 9, 10, 10, 10, 9, 8, 9, 10, 10, 9, 9, 9, 9, 9, 9, 9, 10, 9, 10, 9, 9, 10, 10, 10, 9, 10, 10, 10, 10, 9, 8, 8, 8, 9, 10, 10, 10, 10, 8, 9, 9, 8, 9, 11, 10, 9, 9, 8, 9, 8, 8, 9, 10, 9, 10, 10, 8, 9, 9, 9, 10, 11, 9, 10, 9, 9, 10, 10, 8, 9, 10, 10, 10, 9, 10, 10, 10, 10, 8, 9, 10, 10, 8, 9, 9, 10, 10, 10, 9, 10, 11, 10, 10, 8, 9, 11, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, 8, 9, 10, 10, 8, 9, 9, 10, 10, 9, 10, 11, 9, 8, 9, 10, 10, 10, 9, 10, 7, 9, 8, 9, 9, 10, 11, 10, 9, 8, 9, 7, 8, 9, 10, 11, 11, 8, 9, 10, 8, 9, 8, 9, 10, 11, 10, 9, 9, 10, 10, 10, 9, 9, 10, 11, 9, 9, 9, 10, 8, 9, 9, 10, 9, 10, 9, 8, 8, 8, 9, 10, 7, 9, 9, 9, 8, 8, 8, 9, 9, 8, 9, 9, 6, 7, 7, 8, 9, 9, 9, 10, 7, 8, 8, 8, 9, 9, 10, 10, 10, 8, 8, 8, 8, 9, 9, 10, 10, 10, 8, 9, 8, 8, 8, 8, 9, 9, 9, 8, 9, 8, 8, 9, 9, 10, 10, 10, 10, 10, 7, 9, 8, 8, 9, 10, 10, 10, 10, 8, 9, 8, 9, 9, 10, 10, 10, 10, 9, 10, 10, 10, 8, 8, 8, 9, 8, 8, 9, 9, 9, 10, 7, 8, 8, 9, 8, 9, 10, 9, 8, 8, 8, 8, 9, 8, 9, 9, 9, 10, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 10, 9, 9, 9, 8, 9, 9, 9, 10, 10, 7, 9, 9, 9, 10, 9, 9, 9, 9, 8, 9, 9, 10, 10, 10, 10, 9, 9, 9, 9, 8, 9, 10, 10, 10, 10, 8, 8, 9, 10, 9, 9, 9, 9, 8, 9, 9, 9, 9, 10, 10, 10, 9, 10, 10, 8, 8, 8, 9, 8, 9, 9, 9, 9, 8, 9, 8, 9, 10, 10, 8, 9, 9, 8, 8, 8, 9, 10, 10, 10, 9, 9, 9, 9, 10, 9, 9, 10, 10, 10, 9, 9, 8, 8, 9, 10, 10, 9, 11, 10, 8, 9, 9, 8, 9, 10, 10, 10, 10, 8, 9, 9, 8, 9, 9, 9, 9, 9, 9, 10, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, 10, 10, 10, 10, 8, 9, 10, 10, 9, 9, 10, 10, 10, 9, 9, 9, 9, 10, 8, 7, 9, 10, 10, 10, 9, 10, 8, 9, 8, 9, 10, 10, 10, 10, 10, 10, 10, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 8, 9, 9, 8, 9, 10, 9, 11, 9, 9, 8, 9, 9, 10, 10, 9, 9, 9, 9, 10, 9, 9, 9, 11, 9, 9, 10, 9, 8, 8, 8, 9, 10, 10, 10, 11, 8, 8, 8, 8, 9, 10, 10, 10, 8, 9, 8, 9, 9, 10, 10, 10, 10, 10, 10, 8, 9, 10, 10, 9, 9, 9, 9, 9, 8, 8, 9, 10, 10, 10, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 10, 10, 8, 9, 10, 11, 9, 10, 9, 8, 9, 10, 9, 10, 9, 9, 10, 9, 8, 9, 9, 10, 10, 10, 9, 10, 9, 8, 7, 9, 9, 9, 6, 6, 6, 7, 10, 8, 9, 9, 9, 8, 8, 6, 7, 8, 8, 9, 9, 10, 9, 8, 8, 8, 9, 10, 10, 10, 9, 10, 10, 9, 8, 9, 10, 10, 10, 10, 8, 8, 8, 9, 8, 9, 10, 10, 9, 9, 8, 8, 9, 10, 10, 8, 9, 10, 9, 10, 8, 9, 10, 10, 10, 10, 9, 10, 10, 10, 6, 7, 9, 10, 6, 7, 9, 10, 9, 8, 8, 9, 9, 8, 8, 9, 10, 10, 8, 8, 8, 9, 9, 8, 9, 9, 9, 9, 9, 8, 8, 9, 10, 10, 9, 10, 9, 9, 10, 10, 8, 9, 10, 10, 10, 10, 10, 10, 9, 10, 8, 8, 8, 9, 8, 9, 10, 10, 10, 8, 8, 8, 9, 8, 9, 10, 10, 10, 10, 8, 8, 9, 9, 8, 9, 8, 9, 10, 10, 10, 8, 9, 8, 8, 8, 9, 10, 10, 10, 10, 8, 8, 8, 8, 8, 9, 9, 10, 10, 8, 8, 8, 8, 9, 10, 10, 9, 9, 10, 8, 9, 9, 8, 8, 8, 9, 9, 8, 8, 9, 9, 10, 10, 8, 9, 9, 9, 8, 8, 9, 10, 10, 8, 9, 10, 8, 8, 9, 9, 8, 9, 10, 10, 11, 10, 9, 9, 9, 10, 10, 9, 10, 9, 9, 10, 10, 9, 11, 8, 9, 8, 9, 10, 10, 10, 9, 10, 10, 10, 8, 8, 9, 8, 8, 9, 10, 10, 10, 10, 10, 8, 8, 8, 9, 10, 10, 11, 11, 10, 10, 8, 9, 9, 10, 9, 9, 9, 9, 10, 9, 9, 9, 10, 9, 9, 8, 8, 9, 8, 9, 9, 10, 10, 10, 10, 10, 9, 8, 9, 10, 8, 9, 10, 10, 10, 10, 9, 8, 9, 10, 8, 9, 10, 10, 10, 10, 10, 10, 8, 9, 10, 10, 10, 9, 8, 9, 10, 10, 10, 8, 9, 9, 10, 8, 9, 10, 10, 10, 10, 10, 8, 9, 10, 10, 9, 9, 10, 11, 9, 9, 9, 8, 9, 9, 10, 11, 10, 10, 10, 9, 8, 9, 9, 11, 10, 10, 10, 10, 10, 10, 10, 10, 9, 8, 9, 9, 9, 9, 10, 7, 9, 10, 10, 10, 9, 10, 10, 10, 8, 9, 9, 10, 10, 10, 11, 10, 9, 9, 9, 10, 9, 9, 8, 9, 9, 9, 9, 9, 10, 10, 9, 9, 10, 10, 8, 9, 9, 10, 10, 10, 7, 8, 8, 8, 9, 9, 10, 9, 9, 8, 9, 9, 10, 10, 10, 9, 10, 10, 10, 10, 8, 8, 9, 10, 9, 8, 9, 11, 10, 10, 8, 9, 9, 10, 10, 10, 9, 10, 10, 8, 9, 5, 10, 10, 9, 6, 7, 9, 8, 9, 9, 10, 10, 10, 8, 8, 9, 10, 10, 10, 10, 11, 9, 10, 8, 9, 10, 10, 10, 10, 8, 9, 10, 10, 10, 10, 10, 8, 7, 10, 8};
int main()
{
    int T; scanf("%d", &T);
    while(T--)
    {
        int N;
        scanf("%d", &N);
        printf("%d\n", a[N - 1]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41730082/article/details/107849645
今日推荐