为什么我这么菜,还以为是个傻逼贪心,结果wa了十发。
给你一个数n,可以进行三种操作:
问至少多少次可以把正整数n变成1
dp代码:
int dp[20000010];
int main()
{
fill(dp, dp + 20000005, INF);
dp[1] = 0;
for (int i = 1; i <= 20000000; i++)
{
if (i % 3 == 0)
dp[i] = min(dp[i], dp[i / 3] + 1);
if (i % 2 == 0)
dp[i] = min(dp[i / 2] + 1, dp[i]);
dp[i] = min(dp[i], dp[i - 1] + 1);
}
int t;
cin >> t;
int cas = 1;
while (t--)
{
int n;
cin >> n;
printf(" Case %d: %d\n", cas++, dp[n]);
}
return 0;
}