POJ 2229 Sumsets
2016-03-23 16:16
239 查看
dp[i][j]表示i这个数字用前j个来拼凑有几种方案。
我写的时间复杂度是o(20000000),理论上打个表,然后o(1)输出妥妥的可以AC。
但是后台居然是一个文件一组数据的。。。。。。
做了点优化之后,C++ 压线AC 正好2000ms,G++1200ms。
此外,这题应该是可以找规律AC的。
我写的时间复杂度是o(20000000),理论上打个表,然后o(1)输出妥妥的可以AC。
但是后台居然是一个文件一组数据的。。。。。。
做了点优化之后,C++ 压线AC 正好2000ms,G++1200ms。
此外,这题应该是可以找规律AC的。
15303733 | 14rj134 | 2229 | Accepted | 86572K | 1329MS | G++ | 564B | 2016-03-23 16:08:51 |
15303730 | 14rj134 | 2229 | Accepted | 86352K | 2000MS | C++ | 564B | 2016-03-23 16:08:30 |
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int dp[1000000+10][22]; int a[100]; const int mod=1000000000; int n; void work() { a[1]=1; for(int i=2;i<=20;i++) a[i]=a[i-1]*2; // memset(dp,0,sizeof dp); for(int i=1;i<=20;i++) dp[0][i]=1; for(int j=1;j<=n;j++) { for(int i=1;i<=20;i++) { if(a[i]>j) {dp[j][i]=dp[j][i-1];continue;} dp[j][i]=(dp[j][i-1]+dp[j-a[i]][i])%mod; } } } int main() { scanf("%d",&n); work(); printf("%d\n",dp [20]); return 0; }
相关文章推荐
- Linux内核读书笔记第二周
- KMP算法学习笔记(一)
- Canvas绘制的总结
- How to install Windows on your Mac for free
- ubuntu安装OpenOffice 4.1.1
- Android View初始化基本流程
- 使用android studio创建android项目
- HDU 5025图论之BFS
- 清晰理解互联网络协议
- 字母塔
- ubuntu14.04 LEMP(linux+nginx+mysql+php5)构建环境
- Bzoj2705 Logge的问题
- Cg入门10:Vertex Shader - 几何变换 —MVP矩阵变换
- BPM业务流程管理与SAP如何更好集成整合?
- ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件
- ztree checkbox 选中
- CentOS 6.5 安装NS-2
- xcode使用pch预编译文件来禁止nslog打印
- Gson简要使用笔记
- enum NS_ENUM区别