问题标题: 酷町堂:酷町堂:3107 最少花费

0
0
刘逸泽
刘逸泽
初级守护
初级守护

3107   最少花费

经验值:400 时间限制:1000毫秒

合肥市第34届信息学竞赛

不许抄袭,一旦发现,直接清空经验!

题目描述 Description

卡卡西购买了一批图书后,非常的高兴,爸爸妈妈也表扬了他,称赞他把零用钱用到了最需要使用的地方,但卡卡西发现如果再购买一些文具送给贫困山区的小朋友们就更好了。第二天,卡卡西发动自己的小伙伴拿出他们的零用钱去购买文具,文具以套为单位,按包装销售,每个包装中有数量不等的文具,而且价格也不一样,卡卡西和小伙伴们只想购买一种包装的文具,商店不允许他们将包装拆开,因此卡卡西有可能需要购买超过n套文具才行,在商店每种包装的数量都足够的情况下,要买够至少n套文具最少需要花费多少钱。

输入描述 Input Description

输入数据共m+1行。

第一行有两个用空格分隔的正整数m,n,m 表示包装的数量,n 表示需要购买的套数。

接下来的m 行,每行有两个用空格分隔的正整数s1, s2,分别表示每一种包装中文具的数量和整包的价格。

输出描述 Output Description

一个正整数,表示买够至少n 套文具的最少花费。

样例输入 Sample Input

3 60 3 5 16 20 31 35

样例输出 Sample Output

70

数据范围及提示 Data Size & Hint

样例说明:
共3 种包装,需要购买60 套,如果选择3 套装,需购买20 个,总价格20*5=100,如果选择16 套装,需购买4 个,总价格4*20=80,如果选择31套装,需购买2 个,总价格2*35=70。

数据范围:
1≤m≤1000 1≤n,s1,s2≤10000

错误代码:

#include<iostream>

#include<cstdio>

#include<cmath>

using namespace std;

int main()

{

    long long s=0,s1=0,s2=0,s3=0,n,x=0,y=0,z=0,a=0,b=0,c=0,d,e,f,m;

    cin>>m>>n;

    for(int i=1;i<=m;i++){

        cin>>s>>s1;

        a++;

        s3=s2;

        s2=0;

        while(x<n){

            x+=s;

            s2+=s1;

        }

        x=0;

        if(a>=2){

            if(s3>s2){

                b=s2;

            }

            else{

                b=s3;

            }

        }

    }

    cout<<b;

    return 0;

}

40分


0
0
0
王文博
王文博
缔造者之神
缔造者之神

最好用数组来写。

其他我就看不出来了。

0
0
朱小川
朱小川
缔造者
缔造者

for(int i=1;i<=m;i++)

{

cin>>a>>b;

if(n%a==0)

p=n/a*b;

else

p=(n/a+1)*b;

if(p<=min)

min=p;

}

cout<<min;

朱小川在2021-07-10 16:13:55追加了内容

核心

我要回答