fork(2) download
  1. #include<bits/stdc++.h>
  2. #define F first
  3. #define S second
  4. using namespace std;
  5. int dp[101][10001],zm;
  6. pair<int,int>t[101];
  7. vector<int>wyn;
  8.  
  9. int main(){
  10. ios_base::sync_with_stdio(0);
  11. cin.tie(0);
  12. cout.tie(0);
  13. int n,B;
  14. cin>>n>>B;
  15. for(int i=1;i<=n;i++) cin>>t[i].F;
  16. for(int i=1;i<=n;i++) cin>>t[i].S;
  17. //sort(t[i],t[i]+n)
  18. for(int i=1;i<=n;i++){
  19. for(int j=1;j<=B;j++){
  20. if(j-t[i].F>=0) dp[i][j]=max(dp[i-1][j],dp[i-1][j-t[i].F]+t[i].S);
  21. else dp[i][j]=dp[i-1][j];
  22. }
  23. }
  24. cout<<dp[n][B]<<"\n";
  25. int k=n,l=B;
  26. while(k!=0&&l!=0){
  27. if(k==0||l==0) {k=0; l=0;}
  28. if(l-t[k].F>=0&&dp[k-1][l-t[k].F]+t[k].S>=dp[k-1][l]){
  29. zm++;
  30. wyn.push_back(k);
  31. k-=1; l-=t[k].F;
  32. }
  33. else k--;
  34. }
  35. cout<<zm<<"\n";
  36. for(int i:wyn) cout<<i<<' ';
  37. }
Success #stdin #stdout 0.01s 5304KB
stdin
4 8
4 2 2 2
1 2 2 2
stdout
6
3
4 3 2