统计硬币
来源:互联网 发布:以下 数据库的数据模型 编辑:程序博客网 时间:2024/05/09 01:44
Problem Description
假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。
Input
输入数据第一行有一个正整数T,表示有T组测试数据;
接下来的T行,每行有两个数n,m,n和m的含义同上。
接下来的T行,每行有两个数n,m,n和m的含义同上。
Output
对于每组测试数据,请输出可能的组合方式数;
每组输出占一行。
每组输出占一行。
Sample Input
23 54 8
Sample Output
12法一:暴力#include<stdio.h>main(){int i,j,k;int n,m; int t;int sum;scanf("%d",&t);while(t--){ sum=0;scanf("%d %d",&n,&m);for(i=0;i<=m;i++) for(j=0;j<=m/2;j++)for(k=0;k<=m/5;k++)if(i+j+k==n&&i*1+j*2+k*5==m)sum++;printf("%d\n",sum);}return 0;}法二:母函数,利用二位数组#include<stdio.h>#include<string.h>int c1[100][100],c2[100][100];int main(){///lfreopen("cin.txt","r",stdin);int i,j,k,l,n,m,t;scanf("%d",&t);while(t--){int sum=0;scanf("%d%d",&n,&m);memset(c1,0,sizeof(c1));memset(c2,0,sizeof(c2));for(i=0;i<=n;i++){c1[i][i]=1;}for(i=2;i<=5;i+=3){for(j=0;j<=m;j++)for(k=0;k*i+j<=m&&k<=n;k++){for(l=0;l+k<=n;l++)c2[k*i+j][k+l]+=c1[j][l];}for(j=0;j<=m;j++){for(k=0;k<=n;k++){c1[j][k]=c2[j][k];c2[j][k]=0;}}}printf("%d\n",c1[m][n]);}return 0;}
0 0
- 统计硬币
- 统计硬币
- 统计硬币
- 统计硬币
- 统计硬币
- HDU 2566 统计硬币
- hdu 2566 统计硬币
- HDU2566:统计硬币
- hdu2566(统计硬币)
- hdu 2566 统计硬币
- HDU 2566 统计硬币。
- 统计硬币 2566
- HDU 2566 统计硬币
- hdu-2566-统计硬币
- hdu 2566统计硬币
- HDU2566 统计硬币
- hdu 2566 统计硬币
- hdoj 2566 统计硬币
- HDU 2553 N皇后问题
- iOS- <项目笔记>项目配置常见文件
- 8.05(生产和消费线程)
- JAVA基础篇二(Java,C++中的面向对象)
- The Shortest Path(矩阵快速幂构造有向图+floyed算法求图多源最短路)
- 统计硬币
- 新手的linux之旅 四、安装flash插件
- VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
- Linux sort 命令
- C++ 成员函数的重载与覆盖与隐藏
- hdu 5351 MZL's Border(15多校第五场1009)
- POJ 题目2892 Tunnel Warfare(线段树单点更新查询,求单点所在最大连续区间长度)
- POJ 1879 - Tempus et mobilius Time and motion【置换群】
- Android 中ContentProvider和Uri详解------vnd.android.cursor.dir与vnd.android.cursor.item