hdu1398(母函数或者DP)

题目意思:

有一个序列a[17]=(1,4,9.....,i*i,17*17),对于给出的数字n,求出用给定的序列组合成n的个数。

http://acm.hdu.edu.cn/showproblem.php?pid=1398

题目分析:

该题可以用母函数模板或者DP

DP转化方程    if(dp[j]==1) dp[j+i*i]=1;//记录是否可以到达

res[j+i*i]+=res[j];//记录种类数

母函数:只需要修改模板即可,类似hdu1028,祥见源代码

AC代码:

/**

*母函数或者DP

*母函数解题报告:

*题意和HDU1028差不多但是这个题限制了只能是一个数的平方

*例如第二个样例10的拆分数是这样算出来的就是求:

*(1+x+x^2+x^3+x^4+x^5+x^6+x^7+x^8+x^9+x^10)(1+x^4+x^8)(1+x^9)中

*x^10的系数即可,也是套用母函数模板,只是把把i<=n改成了i*i<=n,

*在k遍历指数时把k=k+i变成了k=k+i*i(因为指数增加的时候是“相加“型,

*例:x^9*x^27=x^36);就AC了!

*/

#include<iostream>

#include<cstring>

using namespace std;

/**母函数

int main()

{

int a[350],b[350],i,j,k,n;

while(cin>>n&&n)

{

for(i=0;i<=n;i++){

a[i]=1;

b[i]=0;

}

for(i=2;i<=17;i++){

for(j=0;j<=n;j++)

for(k=0;k+j<=n;k+=i*i)

b[k+j]+=a[j];

for(j=0;j<=n;j++){

a[j]=b[j];

b[j]=0;

}

}

cout<<a[n]<<endl;

}

return 0;

}**/

/**

*DP转化方程

*if(dp[j]==1) dp[j+i*i]=1; res[j+i*i]+=res[j];//记录种类数

*/

int main()

{

int dp[305],res[305],n;

memset(dp,0,sizeof(dp));

memset(res,0,sizeof(res));

dp[0]=res[0]=1;

for(int i=1;i<=17;i++){

for(int j=0;j+i*i<=300;j++){

if(dp[j]){

dp[j+i*i]=dp[j];

res[j+i*i]+=res[j];

}

}

}

while(cin>>n&&n){

cout<<res[n]<<endl;

}

return 0;

}

时间: 2024-11-06 07:43:35

hdu1398(母函数或者DP)的相关文章

UVa 674 &amp; hdu 2069 Coin Change (母函数,dp)

链接:uva 674 题意:有5中货币,价值分别为 50-cent, 25-cent, 10-cent, 5-cent,1-cent,数量都为无限个, 给定一个数 n,求用上述货币组成价值为 n 的方法有多少? 分析:因为n<=7489,可以用 母函数 或 dp 打表 对于dp状态方程为: dp[j]+=dp[j-c[i]] 母函数: #include<stdio.h> int c1[7500],c2[7500],w[5]={1,5,10,25,50};; void mhs() { in

HDU 1284 钱币兑换问题 母函数、DP

题目链接:HDU 1284 钱币兑换问题 钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5467    Accepted Submission(s): 3123 Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有

HDU 1398 Square Coins(母函数或DP)

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

HDU_1028_Ignatius and the Princess III_(母函数,dp)

Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17917    Accepted Submission(s): 12558 Problem Description "Well, it seems the first problem is too easy. I will let

hdu1028(母函数+DP)

题目信息:求分解整数n的个数q(n);可以母函数或者DP http://acm.hdu.edu.cn/showproblem.php?pid=1028 AC代码: /****************************** 题目大意:求分解整数n的个数q(n) 例: 5 = 5; 5 = 4 + 1; 5 = 3 + 1 + 1; 5 = 3 + 2; 5 = 2 + 2 + 1; 5 = 2 + 1 + 1 + 1; 5 = 1 + 1 + 1 + 1 + 1; sum(5) = 7;不区

hdu 1709 The Balance(母函数)

题意: 有一个天平.有N个砝码.重量分别是A1...AN. 问重量[1..S]中有多少种重量是无法利用这个天平和这些砝码称出来的. S是N个砝码的重量总和. 思路: 对于每一个砝码来说,有三种:不放,放左盘,放右盘. 额,,母函数和DP其实核心一样,,,, 看代码,, 代码: int n; int aa[105]; bool a[10005], b[10005]; int temp[10005]; int main(){ while(scanf("%d",&n)!=EOF){

HDU 题目分类

基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093.1094.1095.1096.1097.1098.1106.1108.1157.1163.1164.1170.1194.1196.1197.1201.1202.1205.1219.1234.1235.1236.1248.1

acm steps

1.1 根蒂根基输入输出:LCY的 A+B 8题 (1089~1096) 1.2 C说话根蒂根基:根蒂根基入门题 (2104,2088,1076,2095,1061,1170,3361,1197) 1.3 排序,贪婪: 1052 很恶心的一道贪婪题 3177 我推荐的这题貌似卡了不少人,遵守差值排序 (1236,1084,2093,2111,2187,1157) 2.1 简单数学题:GCD和素数生成占了很大一项目组 1071 积分题 1717 这题斗劲麻烦 (1108,2138,2504,121

转载:hdu 题目分类 (侵删)

转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093. 1094.1095.1096.1097.1098.1106.1108.1157.116