问题标题: 酷町堂:1416 1267

0
0
已解决
杨子逸
杨子逸
新手天翼
新手天翼

1416   87分:

#include<iostream>
using namespace std;
int main()
{
    int a[1000],n1,n,sum=0;
    cin>>n1;
    n=n1*n1;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n-i;j++)
        {
            if(a[j]<a[j+1])
            swap(a[j],a[j+1]);
        }
    }
    for(int i=1;i<=n1;i++)
    sum+=a[i];
    cout<<sum;
    return 0;
}

1267  90分:

#include<iostream>
#include<algorithm>
using namespace std;
struct gys{
    int p,s;
}sj[110000];
bool cmp(gys a,gys b){
    if(a.p!=b.p)
    return a.p<b.p;
}
int a[110000],m,n,s,t;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    cin>>sj[i].p;
    for(int i=1;i<=m;i++)
    cin>>sj[i].s;
    sort(sj+1,sj+1+n,cmp);
    while(n>0)
    {
        s++;
        n=n-sj[s].s;
        t+=sj[s].s*sj[s].p;
    }
    t+=n*sj[s].p;
    cout<<t;
    return 0;
}

0
已采纳
王睿卿
王睿卿
高级守护
高级守护

for(int i=0;i<n;i++)
    {
        if(w>0)
        {
            w-=s[i].kg;
            sum+=s[i].money*s[i].kg;
            if(w<=0)
            {
                w+=s[i].kg;
                sum-=s[i].money*s[i].kg;
                sum+=w*s[i].money;
                break;
            }
        }
        else
        {
            break;
        }
    }
核心代码

0
0
杨子逸
杨子逸
新手天翼
新手天翼

各位大佬,只要做1267,本人已把1416做出来了

0
完颜傲伦
完颜傲伦
资深守护
资深守护

核心

for(int i=1;i<=m;i++)
    {
        if(sj[i].s>=n)
        {
            ans+=n*sj[i].p;//当提供数量可一次性购买
            cout<<ans;//直接输出
            return 0;//递归思路,这里return 0 即为归
        }
        if(sj[i].s<n)
        {
            ans+=(sj[i].s*sj[i].p);//当无法一次性购买,乘上可供购买的
            n-=sj[i].s;//减去需要的,即递
        }
    }
//这是我帮你改的,判断输出这么写
//同时,判断函数,我是这么写的
bool cmp(gys a,gys b){
    if(a.p!=b.p)
    	return a.p<b.p;
	return a.s<b.s;
}//这可以自己想

 

完颜傲伦在2018-07-26 12:16:39追加了内容

吧  while()  和  cout<<t  替换成这个

完颜傲伦在2018-07-26 12:28:09追加了内容

顺便问一下,我1416为什么是87分,@杨子逸,你怎么改的

0
我要回答