题目描述:
有一伙人要去饭店,饭店的门可以控制大小,但是每个时间间隔只能开大一个或者关闭一个,每个人有一个肥胖值,到场时间和繁荣度。人在他的到场时间到达饭店,如果饭店的门正好符合他的体型,饭店就能获得当前的繁荣度。问最大的繁荣度是多少。
大致思路:
这个题目一看就是一个很明显的动规。对于一个时间T和一个人P,T时间下S开度的状态只能从0-T-S转移过来,有了这个就有了状态方程。
dp[i] = max(dp[j] + p);其中ti-tj>si-sj。
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn = 100 + 10;
struct gang {
int p,s,t;
bool operator < (const gang& ano) const{
return t < ano.t;
}
}g[maxn];
int n,k,t;
int ans[maxn];
int main() {
scanf("%d%d%d",&n,&k,&t);
for (int i = 1; i <= n; i++) scanf("%d