你好,母函数
2016-03-23 15:31
483 查看
#include <stdio.h> #include <string.h> int main( ) { int m,n; int i,j,k,t; while(scanf("%d",&m)==1) { if(m<0) break; n=0; int val[m],num[m];//neng fang zhi shu zhu yue jian for( i=0;i<m;i++) { scanf("%d%d",&val[i],&num[i]); n+=val[i]*num[i]; } int c1[n+1],c2[n+1]; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(i=0;i<=num[0]*val[0]&&i<=n;i+=val[0]) { c1[i]=1; } for(i=1;i<=m-1;i++) { for(j=0;j<=n;j++) for(k=0;k<=num[i]*val[i]&&k+j<=n;k+=val[i]) c2[j+k]+=c1[j]; for(t=0;t<=n;t++) { c1[t]=c2[t]; c2[t]=0; } } for(i=n/2;i>0;i--) { if(c1[i]!=0) break; } printf("%d %d\n",n-i,i); } return 0; } 下面是无限个物品的状态 #include <iostream> using namespace std; const int _max = 10001; // c1是保存各项质量砝码可以组合的数目 // c2是中间量,保存每一次的情况 int c1[_max], c2[_max]; int main() { //int n,i,j,k; int nNum; // int i, j, k; while(cin >> nNum) { for(i=0; i<=nNum; ++i) { c1[i] = 1; c2[i] = 0; } for(i=2; i<=nNum; ++i) { for(j=0; j<=nNum; ++j) for(k=0; k+j<=nNum; k+=i) { c2[j+k] += c1[j]; } for(j=0; j<=nNum; ++j) { c1[j] = c2[j]; c2[j] = 0; } } cout << c1[nNum] << endl; } return 0; }
相关文章推荐
- Linux内核分析 读书笔记 (第五章)
- rpm -e 删除失败
- Fragment生命周期详解
- 获取View的截图-将View转换为Bitmap对象
- MyEclipse6.5安装SVN插件的三种方法 以及基本操作
- 最新一代企业管理软件理念阐述
- vs2010 F5运行,不自动编译
- 显示一幅图像
- Infopath——打开的item点击close后跳转到我们需要的页面
- cortex M0 startup代码解析 如有错误欢迎指出
- HDOJ 1166 敌兵布阵(线段树单点更新求区间和)
- angular模块
- 获取View的截图-将View转换为Bitmap对象
- jquery-1.3.2.js
- 战斗系统之相机逻辑
- CentOS7 LVM添加硬盘及扩容
- Myeclipse10不支持编译器1.7
- iOS面试必看,最全梳理
- 基于javascript实现句子翻牌网页版小游戏
- 学习经验之MVC添加搜索