n点游戏 EOlymp - 44 动态规划

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
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;
}

你可能感兴趣的:(动态规划,游戏,算法)