Square Coins (HDU 1398) ———母函数模板详解

Square Coins

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 7748    Accepted Submission(s): 5238

Problem Description

People in Silverland use square coins. Not only they have square shapes but also their values are square numbers. Coins with values of all square numbers up to 289 (=17^2), i.e., 1-credit coins, 4-credit coins, 9-credit coins, ...,
and 289-credit coins, are available in Silverland.

There are four combinations of coins to pay ten credits:

ten 1-credit coins,

one 4-credit coin and six 1-credit coins,

two 4-credit coins and two 1-credit coins, and

one 9-credit coin and one 1-credit coin.

Your mission is to count the number of ways to pay a given amount using coins of Silverland.

Input

The input consists of lines each containing an integer meaning an amount to be paid, followed by a line containing a zero. You may assume that all the amounts are positive and less than 300.

Output

For each of the given amount, one line containing a single integer representing the number of combinations of coins should be output. No other characters should appear in the output.

Sample Input

2
10
30
0

Sample Output

1
4
27

基本套模板,程序如下:

#include<stdio.h>
int main()
{
    int n,i,j,k;
    int c1[305],c2[305]; //c2为中间过渡量

    while(~scanf("%d",&n),n) //n表示要凑出的数
    {
        for(i=0; i<=n; i++)
            c1[i]=1,c2[i]=0; //将c1赋值为1表示变量系数初始为1
        for(i=2; i<=n; i++) //i指第i个表达式,即相乘的第i个括号
        {
            for(j=0; j<=n; j++) //j就是(前面i个表达式累乘的表达式)里第j个变量
                for(k=0; j+k<=n; k+=i*i)) //k表示第j个指数,即k其实是指基础指数(基本组成元素,比如本题的1,4,9...)
                    c2[j+k]+=c1[j]; //指数为k的变量的系数和,c2[j+k]其实就是指数为k的系数,c1[j]就是遍历前面括号的系数(一直在变化)
            for(j=0; j<=n; j++)
                c1[j]=c2[j],c2[j]=0; //把c2的值赋给c1,而把c2初始化为0,因为c2每次是从一个表达式中开始的
        }
        printf("%d\n",c1[n]); //输出指数为n变量的系数,即方法数
    }
    return 0;
}

这是我看了n遍百度,最后自己理解写的,如解释有误或不详请指正

Square Coins (HDU 1398) ———母函数模板详解

时间: 2024-12-05 06:26:48

Square Coins (HDU 1398) ———母函数模板详解的相关文章

组合数学 - 母函数 --- 模板 + 详解

Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8341    Accepted Submission(s): 5674 Problem Description People in Silverland use square coins. Not only they have square shapes but

Django框架模板详解

Django模板详解 模板使用 模板基本由两个部分组成,一是HTML代码,二是逻辑控制代码. 逻辑控制的实现又基本由三个部分组成: 1. 变量的使用 {{ person_name }} #使用双大括号来引用变量 2. tag的使用 {% if ordered_warranty %} #使用大括号和百分号的组成来表示使用Django提供的 template tag {% for item in item_list %} <li>{{ item }}</li> {% endfor %}

c3p0-config.xml模板详解

c3p0-config.xml模板详解 <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> <property name="acquireIncrement">3</property> <!--定义在从数据库获取新连接失败后重复尝试的次数.Default: 30 --> <property name=&qu

26.C++- 泛型编程之类模板(详解)

在上章25.C++- 泛型编程之函数模板(详解) 学习了后,本章继续来学习类模板   类模板介绍 和函数模板一样,将泛型思想应用于类. 编译器对类模板处理方式和函数模板相同,都是进行2次编译 类模板通常应用于数据结构方面,使得类的实现不在关注数据元素的具体类型,而只关注需要实现的功能 比如: 数组类,链表类,Queue类,Stack类等 使用方法 通过template关键字来声明,然后通过typename关键字来定义模板类型,如下图所示: 类模板的使用 定义对象时,必须指定类模板类型,因为编译器

25.C++- 泛型编程之函数模板(详解)

1)初探函数模板 2)深入理解函数模板 3)多参函数模板 4)重载函数模板 当我们想写个Swap()交换函数时,通常这样写: 但是这个函数仅仅只能支持int类型,如果我们想实现交换double,float,string等等时,就还需要从新去构造Swap()重载函数,这样不但重复劳动,容易出错,而且还带来很大的维护和调试工作量.更糟的是,还会增加可执行文件的大小. 函数模板 一种特殊的函数,可通过不同类型进行调用 函数模板是C++中重要的代码复用方式 通过template关键字来声明使用模板 通过

*HDU 1398 母函数

Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11529    Accepted Submission(s): 7897 Problem Description People in Silverland use square coins. Not only they have square shapes but

Dockerfile创建镜像模板详解

Dockerfile是一个文本格式的配置文件,用户可以使用Dockfile快速创建自定义的镜像.Dockerfile是由一行行的命令语句组成,并且支持以#开头的注释行.vi Dockerfile#一般而言,Dockerfile分为四部分:基础镜像信息.维护者信息.镜像操作指令和容器启动是执行的指令.模板如下: #This dockerfile uses the ubuntu image#指定基于的基础镜像,可以使用多个FROM指令,每个镜像一次#FROM <image>或FROM <im

生成函数(母函数)入门详解

本文章从以上两位大佬的博客参考而来!再次感谢! 母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目. 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供 关于这个序列的信息.使用母函数解决问题的方法称为母函数方法. 母函数可分为很多种,包括普通母函数.指数母函数.L级数.贝尔级数和狄利克雷级数.对每个序列都可以写出以 上每个类型的一个母函数.构造母函数的目的一般是为了解决某个特定的问题,因此

【转】 C++模板详解

C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数.返回值取得任意类型. 模板是一种对类型进行参数化的工具: 通常有两种形式:函数模板和类模板: 函数模板针对仅参数类型不同的函数: 类模板针对仅数据成员和成员函数类型不同的类. 使用模板的目的就是能够让程序员编写与类型无关的代码.比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些类型无法实现,要实现这些类型