2401_86614810 2025-08-09 22:47 采纳率: 33.3%
浏览 8
已结题

2016普及组进阶版

买铅笔 II

题目背景

因为某人在参加NOIP2016普及组的时候,把第一题看成了dp,所以有了下面这个题目……

题目描述

Pteacher需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了能花更少的钱,Pteacher决定每种包装的铅笔都可以买。

商店不允许将铅笔的包装拆开,因此Pteacher可能需要购买超过n支铅笔才够给小朋友们发礼物。

现在Pteacher想知道,在商店每种包装的数量都足够的情况下,要买够至少n支铅笔最少需要花费多少钱。

输入格式:

输入的第一行包含一个正整数n,表示需要的铅笔数量。

接下来三行,每行用两个正整数描述一种包装的铅笔:其中第一个整数表示这种 包装内铅笔的数量,第二个整数表示这种包装的价格。

保证所有的7个数都是不超过10000的正整数。

输出格式:

输出一行一个整数,表示Pteacher最少需要花费的钱。

样例输入:

样例1:

57
2 2
50 30
30 27

样例2:

9998
128 233
128 2333
128 666

样例3:

9999
101 1111
1 9999
1111 9999

样例输出:

样例1:

38

样例2:

18407

样例3:

89991

提示:

铅笔的三种包装分别是:
•2支装,价格为2;
•50支装,价格为30;
•30支装,价格为27。
Pteacher需要购买至少57支铅笔。
她应该选择购买第一种包装4份和第二种包装1份,花费为2×4+30×1=38,所以最后输出的答案是38。

  • 写回答

6条回答 默认 最新

  • a5156520 2025-08-10 09:44
    关注

    这个可以吗?

    #include <iostream>
    
    using namespace std;
    
    int main(void){
        
        int n, a, b, c, ap, bp, cp, min=-1, i, k, t, am;
        
        // 从输入获取需要的铅笔数量,以及三种铅笔包装的铅笔数量和价格 
        cin>>n;
        cin>>a>>ap;
        cin>>b>>bp;
        cin>>c>>cp;
        
        // 使用循环,计算买够n只铅笔,最少需要多少钱 
        for(i=0; (i-1)*a<=n; i++){
            
            for(k=0;(k-1)*b<=n; k++){
                
                for(t=0; (t-1)*c<=n; t++){
                    
                    // 如果包装组合的铅笔总数量大于需要的铅笔数量n 
                    if((i*a+k*b+t*c)>=n){
                        
                        am=i*ap+ k*bp+ t*cp; // 计算当前包装的组合的价格
                        // 第一次,最小价格min初始赋值 
                        if(min==-1){
                            min=am;
                            // cout<<"初始赋值,i="<<i<<", k="<<k<<", t="<<t<<", min="<<min<<endl;
                        // 后面的次数,比当前的最小价格min小,则将当前价格am赋值给最小价格min 
                        }else{
                            
                            if(min>am){
                                min=am;
                            //    cout<<"i="<<i<<", k="<<k<<", t="<<t<<", min="<<min<<endl;
                            }
                            
                        }
                        
                        
                    }
                    
                }
                
            }
            
        } 
        
        cout<<min<<endl;  // 打印结果 
        
        return 0;
        
    } 
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 修改了问题 8月9日
  • 创建了问题 8月9日