记录01背包的问题
这里的t[i] 作为最晚可以观看节目的下标 k作为背包的最大称重量 即可以看的节目数

#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
const int N =1e6+10;
int n,m,T;
struct cmp {
	bool operator()(const int&a,const int&b) const {
		return a>b;
	}
};
int v[1010];
int t[1010];
int dp[1010][1010];
int main() {
	cin >> n>>m>>T;
	for(int i =1;i<=n;i++){
		cin >>v[i];
	}
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=T;i++){
		cin >> t[i];	
	}
	for(int i=1;i<=T;i++){	
		for(int j = 1;j <=t[i];j++){
			for(int k = 1;k<=m;k++){
				dp[j][k]=max(dp[j-1][k],dp[j-1][k-1]+v[j]);
			}
		}
		cout<<dp[t[i]][m]<<endl;
	}

	return 0;
}
//3
//-1 -2 -3