题解 | 1=N

1=N

https://www.nowcoder.com/practice/31469f8503c24914acd5c0290ad4dfbb

补一个不懂数学的dp做法,记忆化不记忆化好像都能过

#include <bits/stdc++.h>
using namespace std;

const int N = 300010, INF = 0x3f3f3f3f;
int dp[N];

int dfs(int x) {
    int &ans = dp[x];
    if (x <= 1) {
        return dp[x];
    }

    if (ans != INF) {
        return dp[x];
    }

    for (int i = 2; i <= x; i ++) {
        if (x % i == 0) {
            ans = min(ans, dfs(x / i) + i);
        }
    }
    ans = min(ans, x);
    return ans;
}

int main() {
    memset(dp, 0x3f, sizeof dp);

    dp[0] = 0;
    dp[1] = 0;
    int n;
    cin >> n;
    cout << dfs(n) << endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务