// uva 11137 Ingenuous Cubrency // // 题目大意: // // 输入正整数n,将n写成若干个数的立方之和,有多少种 // // 解题思路: // // 注意到n只有10000,22的3次方就超过了10000,则用 // d(i,j)表示用前i个数表示j的方法数,则完全背包套用模板 // d(i,j) = d(i-1,j) + d(i , j - i * i * i); // // 感悟: // // 这道题,就是完全背包嘛,要注意数据的范围,做题的时候 //…
题目连接:11137 - Ingenuous Cubrency 题目大意:由21种规模的立方体(r 1~21),现在给出一个体积, 要求计算可以用多少种方式组成. 解题思路:完全背包, 和uva674是一样的, 只是这里的体积是r ^ 3. #include <stdio.h> #include <string.h> const int N = 10005; long long dp[N]; void Init() { int t; dp[0] = 1; for (int i =…
滚动数组优化自己画一下就明白了. 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); 这个递推式…
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数组也要想到边界…
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,…
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 23697    Accepted Submission(s): 8094 Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem.…
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…
题意:用13.23……k3这些数加起来组成n,输出总方案数 d(i, j)表示前i个数构成j的方案数则有 d(i, j) = d(i-1, j) + d(i, j - i3) 可以像01背包那样用滚动数组来实现 //#define LOCAL #include <iostream> #include <cstdio> #include <cstring> using namespace std; ; ]; int main(void) { #ifdef LOCAL fr…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4500 题意: 输入两个长度分别为n和m(n,m≤5000)的颜色序列,要求按顺序合并成同一个序列,即每次可以把一个序列开头的颜色放到新序列的尾部.对于每个颜色c来说,其跨度L(c)等于最大位置和最小位置之差.你的任务是找一种合并方式,使得所有L(c)的总和最小. 分析: 首先,因为…
给一字符串,问最少加几个字符能够让它成为回文串. 比方 Ab3bd 最少须要两个字符能够成为回文串 dAb3bAd 思路: 动态规划 DP[i][j] 意味着从 i 到 j 这段字符变为回文串最少要几个字符,枚举子串长. if str[i] == str[j]: DP[i][j] = DP[i + 1][j - 1] else: DP[i][j] = min( DP[i + 1][j], DP[i][j - 1] ) + 1 注意: 长度较大为 5000,二维数组 5000 * 5000 须要将…