王道机试指南 例题12.8 Piggy-Bank

题目:

题目大意:

算法梳理:

这是一道“背包问题”的应用。“背包问题”分为“0-1背包问题”和“完全背包问题”。

  • 0-1背包问题

  • 完全背包问题

本题思路:

代码:

#include <iostream>
#include <ostream>

using namespace std;

const int MAXN=10000;

int main(){
    int t;
    cin>>t;
    for(int k=0;k<t;k++){
        int e,f;
        cin>>e>>f;
        int m=f-e;//相当于背包总重量
        int n;
        cin>>n;//相当于物品件数
        int v[n],w[n];//相当于每件物品的价值和重量
        for(int i=0;i<n;i++)
            cin>>v[i]>>w[i];

        int dp[m+1];
        dp[0]=0;//dp[0]初始化为0
        for(int j=1;j<=m;j++)//由于所求为最小值,其他dp[i]初始化为正无穷
            dp[j]=MAXN;

        for(int i=0;i<n;i++)
            for(int j=w[i];j<=m;j++)
                dp[j]=min(dp[j],dp[j-w[i]]+v[i]);//状态转移方程

        if(dp[m]==MAXN)
            cout<<"This is imppossible."<<endl;
        else
            cout<<"The minimum amount of money in the piggy-bank is "<<dp[m]<<"."<<endl;
    }
    return 0;
}

运行结果:

全部评论
算法解释的很清楚
点赞 回复 分享
发布于 2023-02-22 21:54 广东
感谢分享题目
点赞 回复 分享
发布于 2023-02-24 22:30 广东

相关推荐

秋招之BrianGriffin:你再跟他说华为工资也低(相对互联网)就可以享受私信爆炸了😋
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务