Pagini recente » Cod sursa (job #2033940) | Cod sursa (job #2742904) | Cod sursa (job #969081) | Cod sursa (job #3342439) | Cod sursa (job #3347617)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("lupu.in");
ofstream cout("lupu.out");
const int NMax=1e3;
int N, X, L;
long long int ans;
vector<vector<int>>v(NMax+5);
vector<int> w(NMax+5);
int main()
{
cin>>N>>X>>L;
int maxpas=X/L+1;
for(int i=1;i<=N;i++)
{
int dist, lana;
cin>>dist>>lana;
int idx=((X-dist)/L)+1;
v[idx].push_back(lana);
w[idx]++;
}
for(auto& row : v)
sort(row.begin(), row.end(), greater<int>());
for(int pas=1;pas<=maxpas;pas++)
{
/// v[y] are max(y-pas+1,0) termeni relevanti
/// ne uitam pe diagonala
int bestc=-1;
for(int ci=pas;ci<=maxpas;ci++)
{
int cj=ci-pas;
/// ne uitam la s[ci][cj]
if(cj<w[ci])bestc=max(bestc, v[ci][cj]);
}
ans+=bestc;
}
cout<<ans;
return 0;
}