1 solutions

  • 0
    @ 2025-3-3 16:25:45

    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