萌新求问,为什么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;
}