HDU_2079 选课时间(生成函数)
来源:互联网 发布:淘宝代购店怎么开 编辑:程序博客网 时间:2024/06/14 05:03
题目请点我
题解:
这是自己接触的第一道生成函数的题目,看了很多别人的博客,感觉对于里面的迭代过程还并不是很清晰,先做一些题目试了一下。发现生成函数的题目格式比较固定,变化点不多,但是需要继续去练习才能进一步理解。
母函数详解
什么是生成函数?
代码实现:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define MAX 10010using namespace std;int T,n,k;int a[10],b[10];int c1[MAX],c2[MAX];int main(){ scanf("%d",&T); while( T-- ){ scanf("%d%d",&n,&k); for( int i = 1; i <= k; i++ ){ scanf("%d%d",&a[i],&b[i]); } memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for( int i = 0,t = 0; i <= n && t <= b[1]; i += a[1],t++ ){ c1[i] = 1; } for( int i = 2; i <= k; i++ ){ for( int j = 0; j <= n; j++ ){ for( int k = 0,t = 0; k+j <= n && t <= b[i];k+=a[i],t++){ c2[j+k] += c1[j]; } } for( int j = 0; j <= n; j++ ){ c1[j] = c2[j]; c2[j] = 0; } } printf("%d\n",c1[n]); } return 0;}
dp实现:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define MAX 45using namespace std;int a,b;int T,n,k;int num[MAX];int dp[MAX];int main(){ scanf("%d",&T); while( T-- ){ memset(dp,0,sizeof(dp)); scanf("%d%d",&n,&k); for( int i = 0; i < k; i++ ){ scanf("%d%d",&a,&b); num[a] = b; } dp[0] = 1; //按照哪种课程->选一次->选几个 构造三层for循环 for( int i = 1; i <= 8; i++ ){ for( int j = n; j >= i; j-- ){ for( int k = 1; k<=num[i] && (j-k*i)>=0; k++ ){ dp[j] += dp[j-k*i]; } } } printf("%d\n",dp[n]); } return 0;}
0 0
- HDU_2079 选课时间(生成函数)
- HDU 2079 选课时间(母函数/生成函数)
- 【hdoj_2079】选课时间(母函数)
- HDU/HDOJ 2079 母函数 选课时间
- HDU 2079 选课时间 母函数
- hdu 2079 选课时间_母函数
- Hdu 2079 选课时间 母函数
- hdu 2079 选课时间(母函数)
- HDU 2079-选课时间(母函数)
- hd2079(选课时间)(母函数)
- HDU 2079 选课时间 (母函数)
- HDOJ--2079选课时间!!!母函数
- 选课时间
- 选课时间(题目已修改,注意读题) + 母函数
- [ACM] hdu 2079 选课时间(普通型母函数)
- 杭电ACM 2097 选课时间(母函数)
- 杭电2079 选课时间(母函数)
- hdu2079选课时间(动态规划&&母函数)
- 细说Cookies
- Visual Studio IDE写C程序
- Android之Adapter用法总结
- MySql之ALTER命令用法详细解读
- Struts2学习笔记-命名空间
- HDU_2079 选课时间(生成函数)
- poj 1046
- Unity 自定义字体 新功能 一
- ios动画
- 一切都放下吧
- visual tracking的scale 问题
- 后缀数组培增算法详解
- Java集合类之再总结
- 浦科特系统迁移问题