24点游戏是非常经典而简单的小游戏,从一堆扑克牌中抽取4张,向其中添加运算符号并使其运行结果恰等于24,这叫作24点游戏。
现在我们不再是组合24,而是组合出给定的数字n,但要求只可以利用任意多个数字1,并且运算只有加法、乘法和括号。对于给定的数字N,最少需要几个1可以完成
数据输入
输入一个数字N( 1≤N≤5000)
数据输出
输出一个整数,表示仅用加号,乘号和括号能组成等于N所需最少的1的个数
样例1
输入样例
7
输出样例
6
提示
7=(1+1)*(1+1+1)+1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5010;
int dp[maxn];
int main()
{
int n;
scanf("%d",&n);
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i] = dp[i-1]+1;
for(int j=2;j*j<=i;j++){
if(i%j==0)
dp[i] = min(dp[i],dp[i/j]+dp[j]);
}
}
printf("%d\n",dp[n]);
return 0;
}