博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2229 Sumsets
阅读量:2125 次
发布时间:2019-04-30

本文共 968 字,大约阅读时间需要 3 分钟。

题意

给定一个数字,问用2的次方数凑,一共有几种情况

例如7:
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
一共有6种情况

AC

  • 完全背包
int dp[N];  //long long超时。。。int mod = 1e9;int main(){#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);#endif    int n;    cin >> n;    int a[22];    for (int i = 0; i < 22; i++) {        a[i] = 1 << i;    }    dp[0] = 1;    for (int i = 0; i < 22; i++) {        if (a[i] > n)   break;        for (int j = a[i]; j <= n; ++j) {            dp[j] += dp[j - a[i]];            dp[j] %= mod;        }    }    cout << dp[n] << endl;    return 0;}
  • 规律
    这里写图片描述
using namespace std;int dp[N];int mod = 1e9;int main(){#ifndef ONLINE_JUDGE    // freopen("in.txt", "r", stdin);#endif    int n;    cin >> n;    dp[1] = 1;    dp[2] = dp[3] = 2;    for (int i = 4; i <= 1000000; ++i) {        if (i > n)  break;        if (i % 2) dp[i] = dp[i - 1] % mod;        else    dp[i] = (dp[i - 2] % mod + dp[i / 2] % mod) % mod;    }    cout << dp[n] << endl;    return 0;}
你可能感兴趣的文章
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>
AndroidStudio 导入三方库使用
查看>>
Ubuntu解决gcc编译报错/usr/bin/ld: cannot find -lstdc++
查看>>
解决Ubuntu14.04 - 16.10版本 cheese摄像头灯亮却黑屏问题
查看>>
解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
查看>>
VS生成DLL文件供第三方调用
查看>>
Android Studio color和font设置
查看>>
Python 格式化打印json数据(展开状态)
查看>>
Centos7 安装curl(openssl)和libxml2
查看>>
Centos7 离线安装RabbitMQ,并配置集群
查看>>
Centos7 or Other Linux RPM包查询下载
查看>>
运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
查看>>
Java中多线程向mysql插入同一条数据冲突问题
查看>>
Idea Maven项目使用jar包,添加到本地库使用
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>