今天做这题才知道原来母函数的原型不是从第二个括号开始,那不过是优化而已,除了1^n,2^n那种类型可以从2开始外其他都要从1开始。好了,上代码吧。

#include<stdio.h>
int n,k,m1[450],m2[450],t,a,b;
int num[15],sc[15];
void gf( )
{for( int i = 0; i <= num[1];i++ )m1[i*sc[1]] = 1;for( int i = 2; i <= k;++i ){for( int j = 0; j <= n; ++j )for( int l = 0; l <= num[i] && j+l*sc[i] <= n; ++l )m2[j+l*sc[i]] += m1[j];for( int j = 0; j <= n; ++j )m1[j] = m2[j],m2[j] = 0;}}
int main( )
{scanf( "%d",&t );while( t-- ){scanf( "%d%d",&n,&k );for( int i = 0; i <= n; ++i )m1[i] = m2[i] = 0;for( int i = 1; i <= k; ++i ){int a,b;scanf( "%d%d",&sc[i],&num[i] );}gf(  );printf( "%d\n",m1[n] );}return 0;
}

其实这题也可以用背包写怎么写呢。。  因为数量有限制,所以这是个多重背包,数量和分数分别是他的一个限制。这是别人写出来的。话说看了好久没懂,最后在时雨的点拨下才明白。话说看懂这里后,我对小雨的DP思想又有深入一层的理解了。

其实应该像小雨讲的,我们不能把背包分得那么清楚。 终于明白为神马这两个循环跟“正常”的多重背包写法不同了,这两个循环第一就是从后面往前面,这样就保证了在选的时候不会重复( 前面的不会影响后面的,其实这个我也是听时雨说的,后来我选了n久,终于有点明白了,要是前面选了的话后面的也会把这个给包容进去,所以要从后面往前面,这样前面的就不会影响后面的 )。相信读者还有一点不明白,就是每一次选的是都是从1到num[i]个,难道前面选的这些都是连续的吗???那样就会有多种选法了,其实这个不用考虑,因为这是一个组合,不是排列,所以不用考虑它连不连续( 前面已经有其他的学分选择了,我只要把这种学分中n个“塞”进去就可以了,不用考这n个是分别“塞在哪里”,只要塞进去就可以了,因为这是组合),大概就这么多了,不懂的大家可以提问

#include<stdio.h>
#include<string.h>
int sc[10],num[10],dp[50],n,k;
int main( )
{int t;scanf( "%d",&t );while( t-- ){scanf( "%d%d",&n,&k );memset( dp,0,sizeof( dp ) );for( int i = 1; i <= k; ++i )scanf( "%d%d",&sc[i],&num[i] );dp[0] = 1;for( int i = 1; i <= k; ++i )for( int j = n; j >= sc[i]; --j )for( int l = 1;l <= num[i] && j >= l * sc[i] ; ++l )dp[j] += dp[j - l * sc[i]];printf( "%d\n",dp[n] );}return 0;
}

转载于:https://www.cnblogs.com/Lvsi/archive/2011/05/11/2043707.html

HDU 2079 选课时间(题目已修改,注意读题) 母函数 || 多重背包相关推荐

  1. HDU 2152 选课时间(题目已修改,注意读题) (母函数)

    选课时间(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. HDU-2079 选课时间(题目已修改,注意读题) -母函数

    选课时间(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. HDU 2076 夹角有多大(题目已修改,注意读题)

    Problem Description 时间过的好快,一个学期就这么的过去了,xhd在傻傻的看着表,出于对数据的渴望,突然他想知道这个表的时针和分针的夹角是多少.现在xhd知道的只有时间,请你帮他算出 ...

  4. HDU 2079 选课时间

    http://acm.hdu.edu.cn/showproblem.php?pid=2079 Problem Description 又到了选课的时间了,xhd看着选课表发呆,为了想让下一学期好过点, ...

  5. 杭电ACM hdu 2079 选课时间 (模板)

    Problem Description 又到了选课的时间了,xhd看着选课表发呆,为了想让下一学期好过点,他想知道学n个学分共有多少组合.你来帮帮他吧.(xhd认为一样学分的课没区别)   Input ...

  6. 母函数+例题(hdu 2079+hdu 2082)

    母函数+例题(hdu 2079+hdu 2082) 虽然ACM的确有点力不从心,但是还是贵在坚持,继续啃啃算法..... 昨天一个下午学了学母函数,离散数学+幂级数,只能说nb- 看了半天的原理,结果 ...

  7. HDU 2079-课程时间(生成函数)

    课程时间(标题已被修改,注意阅读题) Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. 集合已修改;可能无法执行枚举操作。

    问题描述:在用foreach遍历hashtable的时候,弹出"集合已修改:可能无法执行枚举操作." 问题代码: private void Check(int TimeOut)   ...

  9. 修改服务器时间报错,修改服务器时间linux

    修改服务器时间linux 内容精选 换一换 IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题.如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有 ...

最新文章

  1. JMeter入门(1):JMeter总体介绍及组件介绍
  2. linux内核配置失败,petalinux配置内核出现下面错误
  3. for循环 php 增加数组维数_PHP数组在循环中创建多维数组
  4. 在vc或mfc中显示IplImage的方法
  5. gRPC真要取代WebApi了,你还学得过来吗?
  6. 创建链表小细节(引用传递和值传递以及链表中的LinkList L、LinkList *L、LinkList L)
  7. Linux I2C核心、总线与设备驱动(一)
  8. html中如何显示纯文本,从Html中取出纯文本
  9. Android okHttp网络请求之缓存控制Cache-Control
  10. Struts分页的一个实现
  11. WS2:Windows系统中嵌入式Linux开发之神器
  12. ps: 如何调出辅助线
  13. 程序猿的创业故事:一个游走于计算机编程、高中数学、高中物理、爱好木工的全栈工程师,转行做高中教学的亲生经历!
  14. 代码雨【code rain】 cmd 命令快速实现 + java 实现
  15. 开发一款APP都有哪些流程?
  16. pytorch锁死在dataloader(训练时卡死)
  17. 以数赋能,中国系统让数据治理脱虚入实
  18. 区块链实际应用中痛点
  19. 【解决方案】智慧水利:EasyNVR+EasyNVS视频监控解决方案
  20. 中小学计算机课程标准及解读,小学信息技术课课程标准及解读

热门文章

  1. 如何拯救收录直线下滑的网站?
  2. python pycurl_简单谈谈Python的pycurl模块_python
  3. python字符串打印教学_python字符串格式化教你正确打印 : D
  4. druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等...
  5. [python]两种编程思维--面向过程和面向对象
  6. jenkins自动化部署vue
  7. python数据分析及展示(一)
  8. c++中c_str()函数
  9. poj-1384 Piggy-Bank
  10. windows 文件关联图标的设置方法 (附部分代码)