60pts code 求助
查看原帖
60pts code 求助
348196
CZ_7楼主2021/8/10 14:35

萌新求问,为什么60分啊

#include<bits/stdc++.h>
using namespace std;
struct node{
	int k,v,c;
	string s;
}t[110];
int n,m,cnt,tv[10000],ans;
int cmp(node x,node y){
	return x.s<y.s;
}
int main(){
	cin>>m>>n;
	m=21-m;
	for(int i=1;i<=n;i++){//分别代表数量,价值,最大数量,名字 
		cin>>t[i].k>>t[i].v>>t[i].c>>t[i].s;
	}
	sort(t+1,t+1+n,cmp);//按名字排序使得可以将名字一样的东西压缩 
	for(int i=1;i<=n;i++){
		if(t[i].s==t[i+1].s){//如果和后面一样就先存进后面 
			t[i+1].k+=t[i].k;//这样就可以把一样的东西都存在一起 
		}
		else{
			while(1){//然后尽可能塞满,tv记录尽可能大的价值 
				cnt++;
				if(t[i].k<=t[i].c){
					tv[cnt]=t[i].k*t[i].v;
					break;
				}
				else{
					tv[cnt]=t[i].c*t[i].v;
					t[i].k-=t[i].c;
				}
			}
		}
	}
	sort(tv+1,tv+1+cnt);
	for(int i=cnt;i>=cnt-m+1;i--){//将tv数组最大的m个输出 
		ans+=tv[i];
	}
	cout<<ans;
	return 0;
}
2021/8/10 14:35
加载中...