题目大意:
有0~300这300种价值的金额。 现在可能给出参数:
1个:n, 输出可以组成价值n的方式的个数。
2个:n, a, 输出用个数小于a个硬币的组成价值n的方式的个数。
3个:n, a, b, 输出用个数大于a和小于b个硬币组成价值n的方式的个数。
解题大意:
参考了其他人的说明才知道需要用到Ferrers图像的一个结论进行解题,该结论为:用不超过j个硬币凑出面值i的方案种数,是和用面值不超过j的硬币凑出面值i的方案种数是相同的。
所以本题就可以认为是用面值不超过j的硬币凑出面值i的方案中数。设dp[i][j]表示用不超过面值j的硬币凑出面值i的方案种数,那么状态转移方程为:
若i>j,则dp[i][j] += dp[i-j][j]; 表示若硬币面值小于i,则用价值为j的硬币凑成i的数量等于自身的数量加上用价值为j的硬币凑成i-j的数量,此外若j-1>0,dp[i][j] += dp[i][j-1]; 即还要再加上用价值为j-1的硬币凑成i的数量。
代码如下:
#include <iostream> #include <algorithm> #include <vector> #include <string> #include <cmath> #include <fstream> #include <sstream> #include <map> using namespace std; #define LOOP(X,Y) for( int X = 0; X < Y; X++ ) #define LOOPP(X, Y, Z) for( int X = Y; X < Z; X++ ) #define SLOOP(X,Y) for( int X = Y; X >= 0; X-- ) #define SLOOPP(X, Y, Z) for( int X = Y; X >= Z; X-- ) #define OPENFILE(PATH) ifstream fin; fin.open(PATH); #define APENDFILE(PATH) char * file = PATH; ofstream fout( file, ios::out | ios::app ); #define PB push_back #define ULL unsigned long long #define LL long long int coins[301]; LL dp[301][301]; int main() { OPENFILE("test.txt"); string line; int temp; vector<int> v; memset( dp, 0, sizeof( dp ) ); dp[0][0] = 1; //先算出所有可能,即预处理一下。 for( int i = 0; i <= 300; i++ ) { for( int j = 1; j <= 300; j++ ) //j不能从0开始,因为硬币的价值至少为1,若从0开始,最后结果会翻一倍。 { if( i - j >= 0 ) dp[i][j] += dp[i-j][j]; if( j - 1 >= 0 ) dp[i][j] += dp[i][j-1]; } } while(getline( fin, line )) { istringstream is(line); while( is>>temp ) { v.PB(temp); } if( v.size() == 1 ) cout<<dp[v[0]][v[0]]<<endl; else if( v.size() == 2 ) cout<<dp[v[0]][v[1]]<<endl; else cout<<dp[v[0]][v[2]]-dp[v[0]][v[1]-1]<<endl; v.clear(); } return 0; }
相关推荐
DP – 完全背包 – Pay the Price – UVA – 10313 题意: 有n种货币,面值依次是1,2,…,n,现需在一些限制的情况下凑出n元。:有n种货币,面值依次是1,2,…,n,现需在一些限制的情况下凑出n元。:有n种货币,面值...
标题中的"uva272 uva272 uva272"和描述中的"uva272"指的是UVA(University of Virginia)在线判题系统的第272题,这通常与编程竞赛和算法挑战有关。该题目的标签为"算法",意味着我们需要解决一个与计算机算法设计和...
Uva 100 ,问题是The 3n+1 probelm ,可以ac的代码
【uvaoj 习题题目】相关知识点详解 在编程学习和竞赛中,UVa Online Judge(简称UVa或OJ)是一个广受欢迎的在线评测系统,它为程序员提供了大量练习题目,涵盖算法、数据结构、数学等多个领域。通过解决这些题目,...
【UVA在线判题系统与示例代码详解】 UVA(University of Victoria Algorithm Competition)是全球知名的在线算法竞赛平台,它提供了丰富的编程题目供程序员挑战,以提高算法设计和编程能力。UVA Online Judge(简称...
【UVA题目大全】是面向ACM(国际大学生程序设计竞赛)参赛者和算法爱好者的一份宝贵资源。UVA(University of Victoria Algorithm)在线判题系统是世界上最早的在线编程竞赛平台之一,它提供了大量的编程题目供用户...
### UVA10474 Where is the Marble? #### 问题背景 Raju 和 Meena 喜欢玩一种与数字标记的弹珠游戏。在这个游戏中,Raju 首先按照数字升序排列弹珠,然后 Meena 会询问特定数字的弹珠首次出现的位置。如果 Raju 能...
【标题】"uva最全ac代码" 涉及的是在编程竞赛领域中的一个集锦,特别是针对UVA(University of Victoria Algorithm)在线判题系统的解决方案。UVA是全球最早的在线算法竞赛平台之一,吸引了众多程序员参与并提交代码...
这些文件是针对UVA(University of Virginia)在线判题系统的编程题目的解决方案,主要涵盖了编号为200至299的题目。UVA在线判题平台是一个著名的编程竞赛和练习平台,它提供了各种难度级别的算法和编程问题,旨在...
UVA(University of Virginia)在线判题系统是一个广受欢迎的平台,汇集了众多经典算法题目。"uva 50个题解"这个资源显然是针对这个平台的题目的解答集合,特别适合对算法学习和实践感兴趣的人群。下面,我们将深入...
【UVA练习题】是针对在线编程竞赛平台UVA(University of Virginia)的一系列练习题目。UVA是一个广受欢迎的编程竞赛网站,它为程序员提供了一个展示编程技能和解决问题的平台。这里的“不是很难,试试吧”可能意味...
"uva.rar_UVA_posAgent_uva 2d_uva_trilearn"这个标题可能是指一个与UVA平台相关的项目或资源包,其中包含了几个特定的组件。 "posAgent"可能指的是一个定位或位置代理,这在计算机科学中通常与移动机器人、游戏或...
根据给定的信息,本文将对UVA109题目的解决方案进行详细解析,重点在于理解题目背景、所需算法原理及具体实现步骤。 ### 题目背景与要求 UVA109是一道关于计算几何的经典题目,主要考察学生对于**凸包**(Convex ...
1.Uva_base的编译 在编译球队时,则需要在当前球队文件夹下打开终端输入执行以下命令(以下命令都是在root下执行的): ./configure make clean make 如果运行Uva_base后,出现球员越界或掉线的情况,就重新...
世界著名大学UVA OJ平台上的题目部分分类,分的不好请原谅。
uva531最长公共子序列问题水题,应用简单的dp即可ac有更快速的方法欢迎讨论
### Uva 1510 - Neon Sign #### 问题背景与描述 在题目“Uva 1510 - Neon Sign”中,我们面对的是一个霓虹灯招牌设计问题。该霓虹灯招牌由一系列位于圆周上的角点组成,并通过发光管连接这些角点。发光管有两种...
标题中的"UVaOJ-401(Palindromes)"表明这是一个关于解决UVa Online Judge(UVa OJ)上编号为401的编程挑战,该挑战的主题是"Palindromes",即回文串。回文串是指一个字符串无论从前读到后还是从后读到前都是相同的,...
在IT领域,特别是编程竞赛和算法训练中,UVA(University of Virginia)是一个知名的在线判题平台,它为程序员提供了大量的编程题目,旨在提升大家的算法思维和编程能力。"uva 部分题目解决代码"这个压缩包很可能是...
UVa Online Judge是一个著名的在线编程竞赛平台,它提供了大量的算法问题供程序员们挑战,以提升他们的编程技巧和算法理解能力。这个压缩包包含了在UVa平台上部分题目的解答,是学习和参考的好资源。让我们详细了解...