复习笔记之母函数
2016-04-15 16:05
302 查看
HDU 1398 Square Coins
题意:给 17 种面值的钱币,分别为:1-4-9-。。。-17^2.问 x(x <= 300) 能有多少种不同的兑换方式。
思考:略~母函数简单模板题目。事实上还可以用完全背包来做。
HDU1709
~end~
题意:给 17 种面值的钱币,分别为:1-4-9-。。。-17^2.问 x(x <= 300) 能有多少种不同的兑换方式。
思考:略~母函数简单模板题目。事实上还可以用完全背包来做。
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <cstring> #include <queue> using namespace std ; const int maxn = 20010 ; int c1[maxn] , c2[maxn] , sum , N , A[maxn] ; int main() { // freopen("1.txt","r",stdin) ; while (scanf("%d",&N) == 1) { sum = 0 ; for (int i = 1 ; i <= N ; ++ i) scanf("%d",&A[i]) , sum += A[i] ; memset(c1,0,sizeof(c1)) ; memset(c2,0,sizeof(c2)) ; c1[0] = c1[A[1]] = c1[2*A[1]] = 1 ; for (int k = 2 ; k <= N ; ++ k) { for (int i = 0 ; i <= sum*2 ; ++ i) { for (int j = 0 ; j <= 2 && (i+j*A[k] <= sum*2) ; ++ j) c2[i+j*A[k]] += c1[i] ; } for (int i = 0 ;i <= sum*2 ; ++ i) c1[i] = c2[i] , c2[i] = 0 ; } int ans[10010] , cnt = 0 ; for (int i = sum + 1 ; i <= sum*2 ; ++ i) if (c1[i] == 0) ans[++cnt] = i - sum ; printf("%d\n",cnt); for (int i = 1 ; i <= cnt ; ++ i) { if (i == cnt) printf("%d\n",ans[i]); else printf("%d ",ans[i]); } } return 0 ; }
HDU1709
~end~
相关文章推荐
- 目录raw与assets区别
- iOS 中Base base64_encode编码
- linux 内核 的 I/O 模型 (总结)
- log4j 配置详解
- Excel
- i2c 设备读写 与驱动
- 【php趣味】__CLASS__、get_class、get_called_class三兄弟
- MR程序的几种提交运行模式
- Docker Dockerfile详解
- Docker Dockerfile详解
- c#中sealed修饰符
- iOS项目重构日记
- IOS 开发qq登陆界面
- 音频之傅里叶变换的一些资料
- 九宫格算法
- Socket通道
- java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
- ElasticSearch的java API基本操作
- java实现交换排序之冒泡排序
- activity 四种启动模式