宝石交易-动态规划

【问题描述】

  自从八戒发现了魔法森林的秘密,他就开始了“贪婪的小生意”。他开了一个黑店,专门倒卖各种珠宝,今日卖完次日偷,八戒的耳朵已经装不下赚得这些碎银子了。假设八戒手里有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; 
}
复制代码

 

posted @   Hi,小董先生  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示