Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int N=105;
- const int M=2005;
- struct Data{
- int t,d,p,ID;
- }a[N];
- inline bool cmp(const Data &a,const Data &b){
- return a.d<b.d;
- }
- int f[M];
- bool tag[M][N];
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int n;r(n);
- for(int i=1;i<=n;++i){
- r(a[i].t),r(a[i].d),r(a[i].p);
- a[i].ID=i;
- }
- sort(a+1,a+1+n,cmp);
- for(int i=1;i<=n;++i){
- for(int j=a[i].d-1;j>=a[i].t;--j){
- if(f[j]<f[j-a[i].t]+a[i].p){
- f[j]=f[j-a[i].t]+a[i].p;
- tag[j][i]=1;
- }
- }
- }
- int ans=1;
- for(int i=2;i<=a[n].d;++i){
- if(f[i]>f[ans])ans=i;
- }
- printf("%d\n",f[ans]);
- vector<int>Ans;
- for(int i=n;i;--i){
- if(tag[ans][i]){
- Ans.push_back(a[i].ID);
- ans-=a[i].t;
- }
- }
- printf("%d\n",int(Ans.size()));
- for(int i=Ans.size()-1;~i;--i){
- printf("%d ",Ans[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement