1 条题解

  • 1
    @ 2024-10-9 10:37:54

    这是一个经典的动态规划(背包问题) 代码如下 不懂看注释

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    
    using namespace std;
    
    int dp[30005];
    
    int main()
    {
        int shuliang,qian;//希望购买物品的个数 和 总钱数 
        cin>>qian>>shuliang;
    
        int jiage[shuliang],zhongyao[shuliang];//存物品价格,重要度 
    
    
        for(int i = 0;i<shuliang;i++)
        {
            int tmp;//输入此物品重要度 
            cin>>jiage[i];//输入此物品价格 
            cin>>tmp;
            zhongyao[i]=tmp * jiage[i];//由于题目要求积,把重要度直接换成积,组成基础最优方案,不然后面要写好多次 
        }
    	//遍历物品 
        for(int i = 0;i<shuliang;i++)
        {
        	//要求最大值,就从上往下找 
            for(int j = qian;j>=1;j--)
            {
            	//如果它的价格>=上一个方案价格 
                if(j >= jiage[i])
                {
                	//如果有更好的方案,就把这个价格的最优方案替换 
                    dp[j] = max(dp[j],dp[j-jiage[i]] + zhongyao[i]);
                }
            }
        } 
        cout<<dp[qian]<<endl;
        return 0;
    }
    
    

    写题解不易,还望各位点个赞

    • 1

    信息

    ID
    413
    时间
    1000ms
    内存
    64MiB
    难度
    7
    标签
    递交数
    16
    已通过
    11
    上传者