UVA11137 Ingenuous Cubrency

题意

PDF

分析

考虑dp.

用\(d(i,j)\)表示用不超过i的立方凑成j的方案数。

\(d(i,j)=d(i-1,j)+d(i,j-i^3)\)

时间复杂度\(O(IN+T)\)

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<ctime>
#include<cstring>
#define rg register
#define il inline
#define co const
template<class T>il T read()
{
    rg T data=0;
    rg int w=1;
    rg char ch=getchar();
    while(!isdigit(ch))
    {
        if(ch=='-')
            w=-1;
        ch=getchar();
    }
    while(isdigit(ch))
    {
        data=data*10+ch-'0';
        ch=getchar();
    }
    return data*w;
}
template<class T>T read(T&x)
{
    return x=read<T>();
}
using namespace std;
typedef long long ll;

co int I=21,N=1e4;
ll d[I+1][N+1];

int main()
{
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);
    d[0][0]=1;
    for(int i=1;i<=I;++i)
        for(int j=0;j<=N;++j)
        {
            d[i][j]=d[i-1][j];
            if(i*i*i<=j)
                d[i][j]+=d[i][j-i*i*i];
        }
    int n;
    while(~scanf("%d",&n))
        printf("%lld\n",d[I][n]);
    return 0;
}

原文地址:https://www.cnblogs.com/autoint/p/10084374.html

时间: 2024-10-11 10:32:24

UVA11137 Ingenuous Cubrency的相关文章

完全背包——方案个数 UVA11137 Ingenuous Cubrency

题目描述如下 : 代码如下: #include <stdio.h> unsigned long long int dp[10001] ; int main (){ int i,j ,k ; int v[22]; int n ; for (i = 1 ; i < 22 ; i ++) v[i] = i*i*i ; dp [0] = 0 ; for ( i = 1 ; i <=21 ; i ++ ){ for ( j = 0 ; j<10001 ; j ++ ){ if ( j&

uva 11137 Ingenuous Cubrency (完全背包)

uva 11137 Ingenuous Cubrency People in Cubeland use cubic coins. Not only the unit of currency is called a cube but also the coins are shaped like cubes and their values are cubes. Coins with values of all cubic numbers up to 9261 (= 21 3), i.e., coi

【Java】【滚动数组】【动态规划】UVA - 11137 - Ingenuous Cubrency

滚动数组优化自己画一下就明白了. http://blog.csdn.net/u014800748/article/details/45849217 解题思路:本题利用递推关系解决.建立一个多段图,定义状态d(i,j)表示"使用不超过i的整数的立方,累加和为j"的方案数.那么根据加法原理,如果没有选择数字i的立方和就得到了j,那么方案数就是d(i-1,j):如果选择了数字i的立方和才得到了j,那么方案数是d(i,j-i^3).即: d(i,j)=d(i-1,j)+d(i,j-i^3);

UVa 11137 (完全背包方案数) Ingenuous Cubrency

题意:用13.23……k3这些数加起来组成n,输出总方案数 d(i, j)表示前i个数构成j的方案数则有 d(i, j) = d(i-1, j) + d(i, j - i3) 可以像01背包那样用滚动数组来实现 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn = 10; 8

UVA - 11137 Ingenuous Cubrency[背包DP]

People in Cubeland use cubic coins. Not only the unit of currency iscalled a cube but also the coins are shaped like cubes and their valuesare cubes. Coins with values of all cubic numbers up to 9261(= 213),i.e., coins with the denominations of 1, 8,

UVa 11137 - Ingenuous Cubrency

题目:统计一个数字可以有多少种立方和的表示方式. 分析:dp,完全背包.又见整数拆分. 说明:csdn冲进前1000了,(*^__^*) 嘻嘻--. #include <iostream> #include <cstdlib> #include <cstring> using namespace std; int cube[25]; long long F[10001]; int main() { for (int i = 0 ; i <= 21 ; ++ i)

【UVA】11137-Ingenuous Cubrency

DP问题,须要打表. dp[i][j]代表利用大小不超过i的数字组成j的方法. 状态方程是 dp[i][j] = d[i - 1][j] + sum{dp[i - 1][j - k * i * i *i]}; 14327705 11137 Ingenuous Cubrency Accepted C++ 0.049 2014-10-09 10:20:48 #include<cstdio> #include<cstring> #include<algorithm> #inc

uva11137Ingenuous Cubrency(完全背包)

题目:Ingenuous Cubrency 题目大意:给出一类钱,面值有1, 8, 27... (21)^3这21种,然后给出N,问N可以有多少组成方式. 解题思路:dp[i]代表面值为i的最多有多少种组合方式,状态转移方程:dp[i] += dp[i - value[1...21]].  如果要组成i值的话,那么它一定是由之前的状态(i - value[j])加上现有的面值组成.所以只要遍历一边面值,将之前的状态找出来,然后累加起来就可以了.这里可以用递推,因为状态的计算顺序是知道的. 代码:

算法入门经典大赛 Dynamic Programming

111 - History Grading LCS 103 - Stacking Boxes 最多能叠多少个box DAG最长路 10405 - Longest Common Subsequence LCS 674 - Coin Change 全然背包求方案数 10003  - Cutting Sticks 区间DP dp[l][r]代表分割l到r的最小费用 116 - Unidirectional TSP 简单递推 输出字典序最小解 从后往前推 10131 - Is Bigger Smarte