题解 | #整数拆分#

整数拆分

https://www.nowcoder.com/practice/376537f4609a49d296901db5139639ec

//二维数组过大,爆空间!
//#include <iostream>
//#include <algorithm>
//
//using namespace std;
//
//const int N = 10010, mod = 1000000000;
//
//int n;
//int f[N][N];
//
//int main()
//{
//    cin >> n;
//    for(int i=0;i<=n;i++) f[i][0] = 1;
//    int i;
//    for (i = 1; i <= n; i *= 2 )
//        for (int j = 0; j <= n; j ++ )
//        {
//            f[i][j] = f[i/2][j];
//            if(j >= i)
//                f[i][j] = (f[i/2][j] + f[i][j - i]) % mod;
//        }
//    cout << f[i/2][n] << endl;
//
//    return 0;
//}
//



#include <iostream>
#include <algorithm>
using namespace std;
//类比于完全背包问题
const int mod = 1000000000,N=1000000;
int n;
int f[N];
int main()
{
    cin >> n;
    f[0] = 1; //如果要求结果为0,只有一种方案,即什么也不选
    for(int i=1;i<=n;i *= 2)
        for(int j=i;j<=n;j++)       
            f[j] = (f[j]+f[j-i]) % mod;
    cout << f[n];
    return 0;
}

全部评论

相关推荐

11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务