这两天带新生都快把我带傻了。
还没get到精髓
;
;
;
;
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
using namespace std;
const int maxn = 2e3+50;
int dp[maxn][maxn];
struct node
{
int l,r;
node(int ll=0,int rr=0)
{
l = ll;
r = rr;
}
bool operator<(const node &s)const
{
if(l!=s.l)
return l<s.l;
else
return r<s.r;
}
};
node a[maxn];
int main()
{
int T;
int n,m;
int k;
scanf("%d",&T);
for(int ka= 1; ka<=T; ka++)
{
scanf("%d%d%d",&n,&m,&k);
for(int i=0; i<m; i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
}
sort(a,a+m);
int pos = 0;
int num = 0;
memset(dp,0,sizeof(dp));
for(int i=0; i<n; i++)
{
// cout<<a[pos].l<<endl;
while(pos<m && a[pos].l==i+1)
{
num = max(num,a[pos].r-a[pos].l+1);
// cout<<num<<endl;
pos++;
}
for(int j=0; j<=k; j++)
{
dp[i+1][j] = max(dp[i+1][j],dp[i][j]);
dp[i+num][j+1] = max(dp[i+num][j+1],dp[i][j]+num);
}
if(num)
num--;
}
printf("Case #%d: %d\n",ka,dp[n][k]);
}
return 0;
}