```
#include <iostream>
using namespace std;
int N,M,V;
bool road[105][205][205];
int f[105][205][205];
int m[105];
int v[105];
int t[105];
void print(int n1,int m2,int v2){
if(n1 == 1){
if(road[n1][m2][v2]) cout << 1 << " ";
return;
}
if(road[n1][m2][v2])
print(n1 - 1,m2 - m[n1],v2 - v[n1]);
else print(n1 - 1,m2,v2);
if(road[n1][m2][v2]) cout << n1 << " ";
return;
}
int dfs(int n,int m1,int v1){
if(f[n][m1][v1]) return f[n][m1][v1];
if(n == 0) return 0;
if(m1 >= m[n] && v1 >= v[n]){
int x = dfs(n - 1,m1,v1);
int y = dfs(n - 1,m1 - m[n],v1 - v[n]) + t[n];
if(y > x) road[n][m1][v1] = 1;
return f[n][m1][v1] = max(x,y);
}
else
return f[n][m1][v1] = dfs(n - 1,m1,v1);
}
int main(){
cin >> M >> V >> N;
for(int i = 1;i <= N;i++) cin >> m[i] >> v[i] >> t[i];
cout << dfs(N,M,V) << endl;
print(N,M,V);
return 0;
}
by LYM20114 @ 2022-08-23 12:21:45