uva 11137 Ingenuous Cubrency

题意:有1^3,2^3........21^3种硬币,给你一个价值n,问有多少种组成方式。

#include <iostream>
#include <cstdio>
using namespace std;
int coin[25];
long long map[25][10000],dp(int,int);
bool vis[25][10000];
int main()
{
    int n;
    for(int i=0;i<21;i++) coin[i]=(i+1)*(i+1)*(i+1);
    while(scanf("%d",&n)!=EOF)
    {
        printf("%lld\n",dp(20,n));
    }
    return 0;
}
long long dp(int pos,int sum)
{
    if(vis[pos][sum]) return map[pos][sum];
    else if(sum==0||pos==0) {map[pos][sum]=1;return 1;}
    else
    {
        for(int i=pos;i>=0;i--)
        {
            if(sum-coin[i]>=0)
            {
                map[pos][sum]+=dp(i,sum-coin[i]);
            }
        }
        vis[pos][sum]=1;
        return map[pos][sum];
    }
}


你可能感兴趣的:(uva 11137 Ingenuous Cubrency)