Hdu 1398 Square Coins//整数划分(二)
2013-06-08 19:28
447 查看
这道题对整数能够拆分的数有个限制,必须是完全平方数,但是只需要稍微改动一点就可以做了。PS:其实我想用母函数做的,但是代码有点多,o(╯□╰)o!
下面是代码:
/*Hdu 1398 Square Coins
整数划分
PS:赶脚自己的代码写的有点繁琐,o(╯□╰)o!
*/
#include<iostream>
using namespace std;
const int maxn = 310;
int n;
int f[maxn][maxn];
int main()
{
while(cin>>n)
{
if(!n) break;
for(int i = 0; i <= n; i++)
{
for(int j = 0; j <= n; j++)
{
f[i][j] = 0;
}
}
f[1][1] = 1;
for(int i = 2; i <= n; i++)
{
for(int j = 1; j*j <= i; j++)
{
int p = j*j;
int q = (j-1)*(j-1);
if(i == p) f[i][p] = f[i][q] + 1;
else
{
if(i - p <= p) f[i-p][p] = f[i-p][i-p];
f[i][p] = f[i][q] + f[i-p][p];
}
f[i][i] = f[i][p];
}
}
for(int i = n; i >= 1; i--)
{
if(f
[i] != 0)
{
cout<<f
[i]<<endl;
break;
}
}
}
return 0;
}
下面是代码:
/*Hdu 1398 Square Coins
整数划分
PS:赶脚自己的代码写的有点繁琐,o(╯□╰)o!
*/
#include<iostream>
using namespace std;
const int maxn = 310;
int n;
int f[maxn][maxn];
int main()
{
while(cin>>n)
{
if(!n) break;
for(int i = 0; i <= n; i++)
{
for(int j = 0; j <= n; j++)
{
f[i][j] = 0;
}
}
f[1][1] = 1;
for(int i = 2; i <= n; i++)
{
for(int j = 1; j*j <= i; j++)
{
int p = j*j;
int q = (j-1)*(j-1);
if(i == p) f[i][p] = f[i][q] + 1;
else
{
if(i - p <= p) f[i-p][p] = f[i-p][i-p];
f[i][p] = f[i][q] + f[i-p][p];
}
f[i][i] = f[i][p];
}
}
for(int i = n; i >= 1; i--)
{
if(f
[i] != 0)
{
cout<<f
[i]<<endl;
break;
}
}
}
return 0;
}
相关文章推荐
- hdu 1398 Square Coins/hdu 1028 Ignatius and the Princess III
- 母函数-以HDU-1398 Square Coins为例
- hdu 1398 Square Coins 完全背包变形
- HDU-1398-Square Coins
- HDU 1398 Square Coins
- HDU 1398 Square coins 完全背包
- Square Coins hdu 1398
- HDU 1398 Square Coins 平方硬币 (普通母函数,水)
- hdu 1398 Square Coins
- Square Coins HDU(1398)(典型的母函数)
- hdu1398 Square Coins ——DP
- hdu 1398 整数划分变形 (母函数)
- hdu 1398 Square Coins
- [五边形数定理 DP] 51Nod 1259 整数划分 V2 & HDU 4651 Partition
- hdu 5230 整数划分 dp
- HDU 1028 整数划分
- hdu 1028 Ignatius and the Princess III(整数划分)
- 1398 Square Coins
- HDU 1028 Ignatius and the Princess III dp整数划分
- HDU 1028 Ignatius and the Princess III(DP,整数划分)