#include<bits/stdc++.h>
#define N 210
using namespace std;
struct Node{int x,y;}a[N],b[N],c[N];
int dp[N][N];
int n,p,B,C;
inline bool cmp1(Node a,Node b){
if(a.x!=b.x) return a.x<b.x;
return a.y<b.y;
}
inline bool cmp2(Node a,Node b){
return a.y-a.x>b.y-b.x;
}
int main(){
scanf("%d%d",&n,&p);
for(int i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y);
for(int i=0;i<n;i++){
int f=0;
for(int j=0;j<n;j++){
if(i==j) continue;
if(a[i].x==a[j].x&&a[j].y==a[i].y){
if(i>j) continue;
}
if(a[i].x<=a[j].x&&a[j].y<=a[i].y) f=1;
}
if(f) b[B++]=a[i];
else c[++C]=a[i];
}
sort(b,b+B,cmp2);
sort(c+1,c+C+1,cmp1);
int bes=0;
for(int i=0;i<=p;i++)
for(int j=0;j<=C;j++)
dp[j][i]=-1008610086;
dp[0][0]=0;
for(int k=1;k<=p;k++){
for(int i=1;i<=C;i++){
for(int j=1;j<=i;j++){
if(c[j].y-c[i].x<=0) continue;
dp[i][k]=max(dp[i][k],dp[j-1][k-1]+c[j].y-c[i].x);
}
}
}
for(int l=0;l<=p;l++){
int ans=0;
for(int j=0;j<l;j++) ans+=b[j].y-b[j].x;
bes=max(bes,dp[C][p-l]+ans);
}
printf("%d\n",bes);
return 0;
}
NWERC 2015B/bzoj 4426 Better Productivity
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.