Think:
1知识点:动态规划
2题目分析:会议室0~10时可开会,输入最多20组开会起止时间,询问可安排的最大开会数量
3思路:
1>动态规划——线性时间规划
2>数据量最多20组开会起止时间,可暴力枚举状态选择最优解
以下为Accepted代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Node{
int s;
int f;
}node[24];
bool cmp(struct Node a, struct Node b){
if(a.s != b.s)
return a.s < b.s;
else
return a.f < b.f;
}
int main(){
int T, i, j, mav, s, f, t, dp[24];
scanf("%d", &T);
while(T--){
t = 0;
while(scanf("%d %d", &s, &f) && (s || f)){
node[t].s = s, node[t].f = f, t++;
}
sort(node, node+t, cmp);
memset(dp, 0, sizeof(dp));
for(i = 0; i < t; i++){
mav = 0;
for(j = 0; j < i; j++){
if(node[j].f <= node[i].s && dp[j] > mav){
mav = dp[j];
}
}
dp[i] = mav + 1;
}
mav = 0;
for(i = 0; i < t; i++){
mav = max(mav, dp[i]);
}
printf("%d\n", mav);
}
return 0;
}