题目链接:登录 - 沐枫OJ
这个题目其实也是背包问题,而且如果想要简单点的用结构体,不然会出现我这种for套while的情况,所以推荐用老师方法。
我的思路:(是在下输了)
#include <iostream>
using namespace std;
const int N = 3e4+7;
int dp[N],m[100][N],t[N];
int main(){
int n;
cin >> n;
int x[n],y[n];
int s = 0;
for(int i = 1;i <= n;i++){
cin >> x[i] >> y[i];
m[++t[x[i]]][x[i]] = y[i] - x[i];//演讲的持续时间
s=max(s,y[i]);//最长的持续时间
}
for(int i = 0;i <= s;i++){
dp[i] = max(dp[i],dp[i-1]);
int temp = 1;
while(m[temp][i]!=0){//枚举这个点开始的每个演讲
dp[i+m[temp][i]]=max(dp[i+m[temp][i]],dp[i]+m[temp][i]);
temp+