宝石交易-动态规划
【问题描述】
自从八戒发现了魔法森林的秘密,他就开始了“贪婪的小生意”。他开了一个黑店,专门倒卖各种珠宝,今日卖完次日偷,八戒的耳朵已经装不下赚得这些碎银子了。假设八戒手里有v种价值不同的宝石,买家想要购买价值n元的宝石若干, 请问有八戒有多少种销售方式呢?注: 假设每种宝石的数量是无穷的。
输入: 第一行两个整数v,n分别表示宝石种数和买家出价数。第二行v个整数,分别表示v种宝石的价值。
输出: 一个整数,表示销售方法数。
【样例输入】
3 8
1 2 5
【样例输出】
7
状态转移方程: f[i][j]=f[i-1][j]+f[i][j-value[i]] (j>=value[i])
#include<iostream> using namespace std; int f[101][101], val[101], v, n; int main(){ // 输入宝石的种类和背包价值。 cin>>v>>n; for(int i=1; i<=v; i++){ cin>>val[i]; } // 初始化第一列为1。 for(int i=1; i<=v; i++){ f[i][0]=1; } for(int i=1; i<=v; i++){ for(int j=1; j<=n; j++){ if(val[i]<=j){ f[i][j]=f[i-1][j]+f[i][j-val[i]]; }else{ f[i][j]=f[i-1][j]; } } } cout<<f[v][n]; return 0; }