POJ 2393(使用二叉堆来做)

#include <iostream> 
#include <cstring> 
#include <string> 
#include <cstdio> 
#include <algorithm> 
#include <queue> 
using namespace std; 
 
const int N=10005; 
 
priority_queue<int,vector<int>,greater<int> > h; 
long long ans; 
int c[N],y[N]; 
int n,s,tmp; 
 
int main() www.2cto.com
{ 
    int i; 
    freopen("in.txt","r",stdin); 
 
    scanf("%d%d",&n,&s); 
    for (i=1;i<=n;i++) 
        scanf("%d%d",&c[i],&y[i]); 
    ans=0; 
    for (i=1;i<=n;i++) 
    { 
        tmp=c[i]; 
        if (h.size()>0) tmp=min(tmp,h.top()+i*s); 
        ans+=(long long)tmp*y[i]; 
        h.push(c[i]-i*s); 
    } 
    cout << ans << endl; 
} 

你可能感兴趣的:(POJ 2393(使用二叉堆来做))