HDU - 1398 Square Coins (母函数)

原创 2018年04月16日 20:52:54

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. 
InputThe 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. 
OutputFor 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

题意:给你1个n,你有 1  4  9   16  25 ..... i^2 等元素,每个有无限个,现在问你你有几种方案,由任意个元素组成n

比如 

10    4种方案

1+9

1+1+....+1(10个)

4+1+.....+1(6个)

4+4+1+1

 解:c1[i]=j代表的是组成i的方案有j种,c2的意义和c1相同,不过c2是再引入1个新的元素后,方案的变化,然后我们把c2的值赋给c1,c2重新归零

比如 10

我们首先明白可以组成他的元素为  1,4,9,因为每个元素有无限个,不过我们得知道c1[0]=1,因为1个都不选也是一种状态

我们先拿出 元素k= 1  ,显然 for( i ,0 , 10)   c1[i] =1   唯一的方案就是 i 个1

然后拿出 元素 k=4   从 for(i,0,10),每个i 都可以 一直加k 直到值大于 10为止

0 :   c2[0]+=c1[0]     c2[4]+=c1[0]     c2[8]+=c1[0]

1:    c2[1]+=c1[1]    c2[5]+=c1[1]    c2[9]+=c1[1]

2 :    c2[2]+=c1[2]   c2[6]+=c1[2]  c2[10]+=c1[2]

............

然后我们把c2的值赋给c1,清空c2

拿出 元素  k=9   for(i,0,10) 每个i 都可以 一直加k 直到值大于 10为止

0:c2[0]+=c1[0]   c2[9]+=c1[0]  

............

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<math.h>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
int c1[330],c2[330];
int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        for(int i=0;i<=n;i++)//元素 1 的情况
        {
            c1[i]=1;
            c2[i]=0;
        }
        for(int i=2;i*i<=n;i++)  //枚举小于等于n的元素
        {
            for(int j=0;j<=n;j++)//范围,因为最大只要到n即可
            {
                for(int k=0;k<=n;k+=i*i)//看最多能加几个当前元素
                {
                    c2[j+k]+=c1[j];  
                }
            }
            for(int j=0;j<=n;j++)//更新c1,c2
            {
                c1[j]=c2[j];
                c2[j]=0;
            }
        }
        printf("%d\n",c1[n]);
    }
}





版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dsaghjkye/article/details/79965837

杭电ACM hdu 1398 Square Coins 解题报告(母函数)

出处:http://acm.hdu.edu.cn/showproblem.php?pid=1398 Problem Description People in Silverland use squar...
  • u012077163
  • u012077163
  • 2013-11-30 16:43:43
  • 2310

HDU:1398 Square Coins(母函数)

Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...
  • zugofn
  • zugofn
  • 2017-03-17 21:37:18
  • 132

hdu 1398 Square Coins (母函数)

题意:有面值为平方数的硬币若干,最小为1,最大为17^2,给出面值n,问能有多少种组成方案。 生成函数如下: G(x)=(1+x+x2+x3+x4+…)(1+x4+x8+x12+…)(...
  • u014679804
  • u014679804
  • 2015-04-05 15:33:00
  • 250

HDU -- 1398 Square Coins(母函数)

题目大意:给定一个数字n,问它可以有几种方形硬币构成方式,所谓方形硬币就是1,4,9,16.......; 思路分析:G(x)=(1+x+x^2+...+x^n)(1+x^4+x^8+...)(1+...
  • u011346442
  • u011346442
  • 2015-02-08 21:56:46
  • 190

【HDU 1398 Square Coins】+ 母函数

Square CoinsTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot...
  • WYK1823376647
  • WYK1823376647
  • 2017-03-16 21:36:05
  • 335

hdu 1398 Square Coins(母函数)

问题描述: People in Silverland use square coins. Not only they have square shapes but also their values...
  • u012248410
  • u012248410
  • 2013-11-19 09:18:07
  • 601

Hdu 1398 Square Coins 母函数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1398
  • u011632342
  • u011632342
  • 2014-04-25 15:06:17
  • 369

HDU 1398 Square Coins (母函数)

Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...
  • yao1373446012
  • yao1373446012
  • 2016-06-05 10:06:02
  • 199

hdu 1398 Square Coins(母函数)

代码: #include using namespace std; int main() { int n; int a[18]; for(int i=1;i
  • xky1306102chenhong
  • xky1306102chenhong
  • 2015-06-03 20:06:59
  • 446

[母函数]HDU 1398 Square Coins

传送门:Square Coins Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32...
  • u010160562
  • u010160562
  • 2014-02-06 20:28:47
  • 441
收藏助手
不良信息举报
您举报文章:HDU - 1398 Square Coins (母函数)
举报原因:
原因补充:

(最多只允许输入30个字)