题目链接
题意:用无限长的“1145141919”经过加、乘、括号、直接组成数字这四类方法用最短的前缀组成规定的数字。
首先,用dfs爆搜来进行初步估算,可以看出答案不会超过11,或者用穷举答案来看,如果存在非“3、7”的“-1”项,说明答案错了,扩大来看就可以了。
于是,我们就可以推个dp来进行打表了,我们用表示,来表示区间中,是否可以组成权值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;
}