Ingenuous Cubrency

又是dp问题,我又想了2 30分钟,一点思路也没有,最后又是看的题解,哎,为什么我做dp的题这么烂啊!

【题目链接】Ingenuous Cubrency

【题目类型】dp

&题意:

21种硬币,第i种的价值是i* i* i,给出一个数额,问有几种方法能组成这个数额。

比如这个数额是21,那么输出3,有3种方法:

1:21个1

2:1个8,13个1

3:2个8,5个1

&题解:

每次dp,要先想到dp的对象,这次就是要枚举输入的n。

dp数组也要想到边界,这次的边界就是dp[0]=1;

外层要枚举21种数,内层枚举n。注意顺序,21种数是从1开始到21的,因为前面的总是比后面小,这样就能为后面的服务,不会缺少情况了。内层是从coin[i]到n,因为你要注意dp方程的顺序,它用到了前面的值,所以要正着枚举。

【时间复杂度】O(n)

&代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int INF = 0x3f3f3f3f;
  5. #define cle(a,val) memset(a,(val),sizeof(a))
  6. #define SI(N) scanf("%d",&(N))
  7. #define SII(N,M) scanf("%d %d",&(N),&(M))
  8. #define SIII(N,M,K) scanf("%d %d %d",&(N),&(M),&(K))
  9. #define rep(i,b) for(int i=0;i<(b);i++)
  10. #define rez(i,a,b) for(int i=(a);i<=(b);i++)
  11. #define red(i,a,b) for(int i=(a);i>=(b);i--)
  12. const ll LINF = 0x3f3f3f3f3f3f3f3f;
  13. #define PU(x) puts(#x);
  14. #define PI(A) cout<<(A)<<endl;
  15. #define DG(x) cout<<#x<<"="<<(x)<<endl;
  16. #define DGG(x,y) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<endl;
  17. #define DGGG(x,y,z) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<" "<<#z<<"="<<(z)<<endl;
  18. #define PIar(a,n) rep(i,n)cout<<a[i]<<" ";cout<<endl;
  19. #define PIarr(a,n,m) rep(aa,n){rep(bb, m)cout<<a[aa][bb]<<" ";cout<<endl;}
  20. const double EPS = 1e-9 ;
  21. /* //////////////////////// C o d i n g S p a c e //////////////////////// */
  22. const int MAXN = 10000 + 5 ;
  23. int coin[50],n;
  24. ll dp[MAXN];
  25. void Solve()
  26. {
  27. while(~SI(n)){
  28. cle(dp,0);
  29. dp[0]=1;
  30. for(int i=1;i<=21;i++){
  31. for(int j=coin[i];j<=n;j++){
  32. dp[j]+=dp[j-coin[i]];
  33. }
  34. }
  35. PI(dp[n])
  36. }
  37. }
  38. int main()
  39. {
  40. #ifndef ONLINE_JUDGE
  41. freopen("1.in", "r", stdin);
  42. freopen("1.out","w",stdout);
  43. #endif
  44. //iostream::sync_with_stdio(false);
  45. //cin.tie(0), cout.tie(0);
  46. // int T;cin>>T;while(T--)
  47. rez(i,1,21) coin[i]=i*i*i;
  48. Solve();
  49. return 0;
  50. }

UVA 11137 Ingenuous Cubrency(dp)的更多相关文章

  1. uva 11137 Ingenuous Cubrency(完全背包)

    题目连接:11137 - Ingenuous Cubrency 题目大意:由21种规模的立方体(r 1~21),现在给出一个体积, 要求计算可以用多少种方式组成. 解题思路:完全背包, 和uva674 ...

  2. UVA - 11137 Ingenuous Cubrency[背包DP]

    People in Cubeland use cubic coins. Not only the unit of currency iscalled a cube but also the coins ...

  3. uva 11137 Ingenuous Cubrency

    // uva 11137 Ingenuous Cubrency // // 题目大意: // // 输入正整数n,将n写成若干个数的立方之和,有多少种 // // 解题思路: // // 注意到n只有 ...

  4. uva 116 Unidirectional TSP (DP)

    uva 116 Unidirectional TSP Background Problems that require minimum paths through some domain appear ...

  5. UVa 12186 Another Crisis (DP)

    题意:有一个老板和n个员工,除了老板每个员工都有唯一的上司,老板编号为0,员工们为1-n,工人(没有下属的员工),要交一份请愿书, 但是不能跨级,当一个不是工人的员工接受到直系下属不少于T%的签字时, ...

  6. UVa 1638 - Pole Arrangement(dp)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. UVA 1638 Pole Arrangement (dp)

    题意:有n个长度为1到n的柱子排列在一起,从左边看有l根从右边看有r根,问你所以排列中满足这种情况的方案数 题解:就是一个dp问题,关键是下标放什么,值代表什么 使用三维dp,dp[i][j][k]= ...

  8. UVA 674 Coin Change(dp)

    UVA 674  Coin Change  解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...

  9. UVA 10163 - Storage Keepers(dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题意 有n个仓库,让m个人来看管.一个仓库只能由一个人来看管,一个人可以看管多个仓库. 每个人 ...

随机推荐

  1. hdu5442(2015长春赛区网络赛1006)后缀数组+KMP /最小表示法?

    题意:给定一个由小写字母组成的长度为 n 的字符串,首尾相连,可以从任意一个字符开始,顺时针或逆时针取这个串(长度为 n),求一个字典序最大的字符串的开始字符位置和顺时针或逆时针.如果有多个字典序最大 ...

  2. Java中相等测试

    一:equals与==的区别 (1)基本数据类型 byte,short,char,int,long,float,double,boolean 此类数据类型的比较需要使用==,此时比较的是他们的值,若相 ...

  3. C语言中强制数据类型转换(转)

    原文地址不详 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255(有些 ...

  4. 采用PHP函数uniqid生成一个唯一的ID

    http://www.daimajiayuan.com/sitejs-17815-1.html

  5. Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)

    1. Mesos简介 1.1 Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理. Mesos主要由以下几部分组成: Master: 管理各Slave节点 S ...

  6. Android 反编译 代码注入之HelloWorld

    为了向经典的"Hello, World"致敬,我们也从一个简单的程序开始HelloWorld.apk.当你把这个APK安装到手机上运行后,在屏幕上就显示一行文字"Hell ...

  7. 在VS 2015 RTM 版中 提示 未能正确加载 NuGetPackage包

      在原来的项目中曾经启用了Nuget在编译时还原包功能.这样就会在 *.sln在平行目录生成 一个.Nuget文件夹, 删除了它,就好了.   我分析原因是, VS 2015 使用的是 NugetP ...

  8. fastBinaryJSON

    fastBinaryJSON 是基于 fastJSON 的二进制 JSON 序列化器.详细介绍请看这里. 数据编码格式: 序列化速度比较:

  9. IE和FireFox中JS兼容之event .

    event对象 IE 中可以直接使用 event 对象,而 FF 中则不可以,解决方法之一如下:var theEvent = window.event || arguments.callee.call ...

  10. Redis 高可用性解决方案(Sentinel)

    Sentinel是Redis的高可用性解决方案: 由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主 ...