HDU——2566 统计硬币 (简单枚举 || 母函数)

5人阅读 评论(0) 收藏 举报
分类:

Problem Description

假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。

Input

输入数据第一行有一个正整数T,表示有T组测试数据;
接下来的T行,每行有两个数n,m,n和m的含义同上。

Output

对于每组测试数据,请输出可能的组合方式数;
每组输出占一行。

Sample Input

2
3 5
4 8

Sample Output

1
2

解题思路:

方法一 : 拿到这个题目 , 三层循环就可以解决,但是时间复杂度太高 ,为O(n^3).此基础上,因为总量是确定的,确定了前两个的个数之后 , 第三个也能够确定 , 所以可以减少一层循环,时间复杂度也可以相对降低一点 , 为 O(n^2).
代码:

//方法一 直接枚举 , 时间复杂度为 O(n^2)
/*
#include <cstdio>
#include <cstring>
using namespace std;

int value[4] = {0 , 1 , 2 , 3};
int main(){
    int t , n , m , i , j , k ,ans;
    scanf("%d", &t);
    while( t --){
        ans = 0;
        scanf("%d %d",&n , &m);
        for(i = 0 ; i <= n ; i ++){
            for(j = 0 ; j + i <= n ; j ++){
                    if(1 * i + 2 * j + 5 * (n - i - j) == m)
                        ans ++;
            }
        }
        printf("%d\n" , ans);
    }
    return 0;
}

方法二:因为当只要考虑面值为 1 和 2 的硬币的组合情况时 , 当总面值确定时 , 每一个总面值有也仅有一种组合情况 。 利用一点 , 我们可以先确定面值为 5 的纸币的数量,然后在考虑面值1和2 , 这样时间复杂度就可以很大的降低 ,为 O(m).
代码:

//方法二 加了那么一点点技巧 , 主要时间复杂度可以降低很多
//考虑如果只有面值为1、2的硬币n枚。那么能够唯一组成区间[n,2n]范围里的任意面值。

#include <cstdio>
using namespace std;

int main(){
    int t , n , m , i,ans;
    scanf("%d", &t);
    while( t --){
        ans = 0;
        scanf("%d %d",&n , &m);
        for(i = 0 ; i <= m/5 && i <= n; i ++){  //首先确定面值为5 的硬币可能出现的张数。
            int temp = m - i*5;  //剩下的面值
            int tempcount = n - i;  //剩下的张数

            if(tempcount * 1 <= temp && tempcount * 2 >= temp)
                ans ++;
        }
        printf("%d\n" , ans);
    }
    return 0;
}
查看评论

MATLAB数据分析与统计

-
  • 1970年01月01日 08:00

【hdoj_2566】统计硬币(母函数?)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2566 本题可以借鉴母函数(组合数学)的思想. 题目可以这样理解:给一堆硬币,分别有1,...
  • ten_sory
  • ten_sory
  • 2017-03-03 20:56:29
  • 237

hdu 2566 统计硬币(母函数)

#include #include #include #include using namespace std; int c1[1010][1010],c2[1010][1010]; int main...
  • u013365671
  • u013365671
  • 2014-08-08 19:41:39
  • 469

HDU - 2566 统计硬币(常数时间解法)

HDU - 2566 统计硬币(常数时间解法)
  • nameofcsdn
  • nameofcsdn
  • 2016-12-01 15:33:06
  • 1397

HDU 2566 统计硬币

硬币的排列组合
  • DT_Zhangshuo
  • DT_Zhangshuo
  • 2017-02-28 20:02:37
  • 315

HDU 1085 母函数 硬币组合

题目如下: Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/327...
  • CSXIAOYAOJIANXIAN
  • CSXIAOYAOJIANXIAN
  • 2014-02-16 16:33:47
  • 399

HDU 2566 统计硬币。

Problem Description 假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。   Input ...
  • u013519226
  • u013519226
  • 2014-02-03 17:10:24
  • 1194

hdu 2566统计硬币

Problem Description 假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。   Input 输入数据...
  • wuwielk
  • wuwielk
  • 2014-07-10 10:35:05
  • 218

HDU 2566 统计硬币

Problem Description 假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。   Input ...
  • u013776243
  • u013776243
  • 2014-04-05 13:44:25
  • 275

hdu 2566 统计硬币

统计硬币 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub...
  • u013806814
  • u013806814
  • 2014-08-11 23:30:53
  • 645
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 956
    排名: 5万+
    文章分类
    最新评论