1 solutions

  • 0
    @ 2024-12-11 0:49:57

    C :

    #include "stdio.h"
    int n,m;
    int a[11][11],f[100001];
    int main()
    {
    	int i,j,k;
    	int x,y;
    	scanf("%d%d",&n,&m);
    	for(i=0;i<n;i++)
    	{
    		scanf("%d%d",&x,&y);
    		a[x][y]++;
    	}
    	for(i=1;i<=10;i++)
    	{
    		for(j=1;j<=10;j++)
    		{
    			if(!a[i][j])
    				continue;
    			x=1;
    			while(x<a[i][j])
    			{
    				for(k=m;k>=x*i;k--)
    					if(f[k]<f[k-x*i]+x*j)
    						f[k]=f[k-x*i]+x*j;
    					a[i][j]-=x;
    					x*=2;
    			}
    			x=a[i][j];
    			for(k=m;k>=x*i;k--)
    					if(f[k]<f[k-x*i]+x*j)
    						f[k]=f[k-x*i]+x*j;
    		}
    	}
    	printf("%d\n",f[m]);
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    
    int  main()
    {
    	int tim,sum;
    	cin>>sum>>tim;
    	int num[11][11]={0};
    	int x,y;
    	for(int i=1;i<=sum;i++)
    	{
    		cin>>x>>y;
    		num[x][y]++;
    	}
    	int w[100001],c[100001];
    	int f[100001]={0};
    	int t,s;
    	int tot=0;
    	int p=0;
    	for(int i=1;i<10;i++)
    	{
    		for(int j=1;j<=10;j++)
    		{
    			t=1,s=num[i][j];
    			while(s>=t)
    			{
    				c[p]=t*j;
    				w[p]=t*i;
    				p++;
    				s-=t;
    				t*=2;
    			}
    			c[p]=s*j;
    			w[p]=s*i;
    			p++;
    		}
    	}
    	for(int i=1;i<=p;i++)
    	{
    		for(int j=tim;j>=w[i];j--)
    		{
    			if(f[j]<f[j-w[i]]+c[i])
    			{
    				f[j]=f[j-w[i]]+c[i];
    			}
    		}
    	}
    	cout<<f[tim];
    }
    
    • 1

    Information

    ID
    779
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By