YbtOj练习:贪心 1最大积分

http://noip.ybtoj.com.cn/contest/12/problem/1

 这道题的题意描述有问题。。。。问题很大,导致我WA了无数次。

 

 如果看这句话很容易就会理解错。

 

 在我WA了n次之后看到了这两个字,哦豁,原来这里的意思是当你在第i级时,如果买的总件数达到了t[i],那么就可以升级。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=105;
ull t[N],sum,ans;//sum:总件数 
int n,m;
struct node{
    ull k,c;
    bool operator < (const node &G)const
    {
        return c<G.c;
    }
}a[N];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].k>>a[i].c;
    cin>>m;
    for(int i=1;i<=m;i++) cin>>t[i];
    t[m+1]=1e13;
    sort(a+1,a+n+1);
    int Lv=1;
    for(int i=1;i<=n;i++)
    {
        while(sum+a[i].k>=t[Lv])
        {
            ans+=(t[Lv]-sum)*a[i].c*Lv;
            a[i].k-=t[Lv]-sum;
            sum=t[Lv];
            Lv++;
        }
        ans+=a[i].k*a[i].c*Lv;
        sum+=a[i].k;
    }
    cout<<ans;
    return 0;
}

 

posted @ 2020-08-03 14:51  Gold_stein  阅读(406)  评论(1编辑  收藏  举报