1 solutions
-
0
C :
#include<stdio.h> #define max(a,b) (a>b?a:b) int n,m; int f[100000]; int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { int w,v; scanf("%d %d",&w,&v); for(int j=m;j>=w;j--) f[j]=max(f[j],f[j-w]+v); } printf("%d",f[m]); return 0; }
C++ :
#include<bits/stdc++.h> using namespace std; int n,v,kg,mwz,ekg[1010101],sm,sk,i1,i2,sg; double mk; int mi,mii; double kmwz[1010101]; int main() { cin>>n>>v; for(int i=0; i<n; i++) { cin>>kg>>mwz; ekg[i]=kg; kmwz[i]=1.0*mwz/kg; } for(int i=0; i<n; i++) { mk=0; sg==1; for(int j=0; j<n; j++) { if(mk<kmwz[j]) { mk=kmwz[j]; mi=ekg[j]; mii=j; i1=0; i2=0; sg==1; } else { if(mk==kmwz[j]) { sg++; if(mi==1) { i1++; } else { i2++; } } } } if(sg>=2) { if(i1>=1&&i2>=1) { if(v>=sk+2) { sk=sk+2; sm=sm+mk*2; for(int j=0; j<n; j++) { if(ekg[j]==2&&kmwz[j]==mk) { ekg[j]=0; kmwz[j]=0; } } } else { sk=sk+1; sm=sm+mk; for(int j=0; j<n; j++) { if(ekg[j]==1&&kmwz[j]==mk) { ekg[j]=0; kmwz[j]=0; } } } } else { if(i2>=2) { sk=sk+2; sm=sm+mk*2; for(int j=0; j<n; j++) { if(ekg[j]==2&&kmwz[j]==mk) { ekg[j]=0; kmwz[j]=0; } } } else { sk=sk+1; sm=sm+mk; for(int j=0; j<n; j++) { if(ekg[j]==1&&kmwz[j]==mk) { ekg[j]=0; kmwz[j]=0; } } } } } if(v>=sk+mi) { sk=sk+mi; sm=sm+mk*mi; kmwz[mii]=0; ekg[mii]=0; } if(v==sk) { break; } else { kmwz[mii]=0; ekg[mii]=0; } } cout<<sm; return 0; }
- 1
Information
- ID
- 10068
- Time
- 1000ms
- Memory
- 16MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By