1 条题解

  • 0
    @ 2025-2-14 21:11:41

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    using namespace std;
    struct pos
    {
    	int num;
    	int dist;
    }f[500];
    int cmp(pos i,pos j)
    {
    	return i.num>j.num;
    }
    int main()
    {
    	int n,m,k;
    	cin>>n>>m>>k;
    	int maxk[k+10];
    	for(int i=1;i<=k;++i)
    	{
    		cin>>maxk[i];
    	}
    	
    	for(int i=1;i<=n;++i)
    	{
    		cin>>f[i].num>>f[i].dist;
    	}
    	
    	sort(f+1,f+n+1,cmp);
    	int ans=0;
    	int sum=0;
    	for(int i=1;i<=n;++i)
    	{
    		if(maxk[f[i].dist]!=0)
    		{
    			ans=ans+f[i].num;
    			maxk[f[i].dist]--;
    			sum++;
    		}
    		if(sum==m)
    		{
    			break;
    		}
    	}
    	cout<<ans;
    	return 0;
    	
    	
    }
    

    Pascal :

    var
     a:array [1..200,1..2] of longint;
     g:array [1..100] of longint;
     ans:longint;
     n,i,j,k,m,t:longint;
    procedure swap(var a,b:longint);
    var
    t:longint;
    begin
     t:=a;
     a:=b;
     b:=t;
    end;
    begin
     {assign(input,'3.in');
     assign(output,'3.out');
     reset(input);
     rewrite(output);}
     readln(n,m,k);
     for i:=1 to k do
      read(g[i]);
     readln;
     for i:=1 to n do
      readln(a[i,1],a[i,2]);
     for i:=1 to n-1 do
      for j:=n downto i+1 do
       begin
        if a[j,1]>a[j-1,1] then
         begin
          swap(a[j,1],a[j-1,1]);//...这么小点...就冒泡吧...
          swap(a[j,2],a[j-1,2]);
         end;
       end;
       t:=0;
     for i:=1 to  n do
      begin
       if g[a[i,2]]>0 then
        begin
         inc(ans,a[i,1]);
         dec(g[a[i,2]]);
         inc(t);
         if t=m then break;
        end;
      end;
      writeln(ans);
     {close(input);
     close(output);}
    end.
    

    Java :

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner sc = new Scanner(System.in);
    		int n =sc.nextInt();
    		int m = sc.nextInt();
    		int k = sc.nextInt();
    		int[] flag = new int[k+1];
    		ArrayList<ttt> al = new ArrayList<>();
    		for (int i = 1; i <= k; i++) {
    			flag[i]=sc.nextInt();
    		}
    		for (int i = 0; i < n; i++) {
    			al.add(new ttt(sc.nextInt(),sc.nextInt()));
    		}
    		Collections.sort(al);
    		int j = m;
    		int i = 0;
    		int s = 0;
    		while(j>0&&i<n) {
    			if(flag[al.get(i).b]>0) {
    				j--;
    				flag[al.get(i).b]--;
    				s+=al.get(i).a;
    			}
    			i++;		
    		}
    		System.out.println(s);
    	}
    
    }
    class ttt implements Comparable<ttt>{
    	int a;
    	int b;
    	public ttt(int a, int b) {
    		super();
    		this.a = a;
    		this.b = b;
    	}
    	@Override
    	public int compareTo(ttt o) {
    		// TODO Auto-generated method stub
    			return o.a-this.a;
    	}
    	
    }
    
    • 1

    信息

    ID
    712
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者