Cod sursa(job #2500090)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 27 noiembrie 2019 11:22:46
Problema Branza Scor 30
Compilator cpp-64 Status done
Runda guritza Marime 0.96 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int lim=100003;int u=lim-1;
long long n,s,t,nr[100003],cost[100003],dp[100003],suma;char sir[lim];
void next () {
	++u;
	if(u==lim) {
		fread(sir,1,lim,stdin);
		u=0;
	}	
}
void get (long long & x) {
	x=0;
	for(;sir[u]<'0' || sir[u]>'9';next());
	for(;sir[u]>='0' && sir[u]<='9';next())
		x=x*10+sir[u]-'0';
}
long long minim (long long nr1, long long nr2) {
    if(nr1<nr2)
        return nr1;
    return nr2;
}
int main () {
	freopen("branza.in","r",stdin);
	freopen("branza.out","w",stdout);
	get(n);get(s);get(t);
	//scanf("%d%d%d", &n, &s, &t);
	get(cost[1]);get(nr[1]);
	//scanf("%d%d", &cost[1], &nr[1]);
	dp[1]=nr[1]*cost[1];
	for(int i=2;i<=n;++i) {
		get(cost[i]);get(nr[i]);
		//scanf("%d%d", &cost[i], &nr[i]);
		dp[i]=nr[i]*cost[i];
		for(int j=i-1;j>0 && i-j<=t;--j)
			dp[i]=minim(dp[i],(i-j)*s*nr[i]+nr[i]*cost[j]);
	}
	for(int i=1;i<=n;++i)
        suma+=dp[i];
    printf("%lld", suma);
	return 0;
}