Pagini recente » Cod sursa (job #781528) | Cod sursa (job #1305253) | Cod sursa (job #3130724) | Cod sursa (job #1765537) | Cod sursa (job #477788)
Cod sursa(job #477788)
#include<fstream>
#include<algorithm>
#define player pair<int,int>
#define x first
#define y second
using namespace std;
const char iname[]="echipe.in";
const char oname[]="echipe.out";
const int maxn=260;
ifstream f(iname);
ofstream g(oname);
inline bool fcomp(const player& a,const player& b)
{
return (a.y-a.x)<(b.y-b.x);
}
player a[maxn],b[maxn],c[maxn];
int n,k,p,i,j,rez,v,dp[maxn][maxn];
int main()
{
f>>n>>k;
for(i=1;i<=n;++i)
f>>a[i].x>>a[i].y;
sort(a+1,a+n+1,fcomp);
for(i=n;i>n-k+1;--i)
rez+=(a[i].y-a[i].x);
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
if(a[i].x<=a[j].x&&a[i].y>=a[j].y)
if(a[i].x==a[j].x&&a[i].y==a[j].y)
if(i<j)
break;
else;
else
break;
if(j>n)
c[++p]=a[i];
else
b[++v]=a[i];
}
n=v;
sort(b+1,b+n+1,fcomp);
sort(c+1,c+p+1);
for(i=1;i<=p;++i)
dp[1][i]=max(0,c[1].y-c[i].x);
for(i=2;i<=k;++i)
for(j=i;j<=p;++j)
for(v=j;v>=i;--v)
{
if(c[v].y<=c[j].x)
break;
dp[i][j]=max(dp[i][j],dp[i-1][v-1]+c[v].y-c[j].x);
}
v=0;
for(i=k;i&&n>=0;--i)
{
if(dp[i][p]==0&&k<=p)
break;
rez=max(rez,dp[i][p]+v);
if(n==0)
break;
v+=b[n].y-b[n].x;
--n;
}
g<<rez<<"\n";
}