郑州轻工业大学2021新生赛 2785: 贪心的小H

郑州轻工业大学2021新生赛 2785: 贪心的小H

题目描述
小H是一个考古学家,有一天他发现了海盗的宝藏,但是他只带了一个背包。现在摆在面前的宝物有100多件,每个宝物都有一个类型值(type)和一个珍贵程度(value)。现在要求选择若干个宝物(可以是0个)放进背包使得x * y最大,x为选择的不同type的数量,y为总的value值之和(同一种宝物value值一致,只计算一次value值)
输入
第一行输入一个整数n表示物品的数量(1 ≤ n ≤ 200)

第二行输入n个整数type_i表示每个物品的类型(1 ≤ type_i ≤ 200)

第三行输入n个整数value_i(-100000 ≤ value_i ≤ 100000)
输出
输出一个整数
样例输入 Copy

2
1 2
4 7

样例输出 Copy

22

#include<bits/stdc++.h>
using namespace std;
struct b{
	int t;
	int v;
}B[202];
int f[202][100005]={0};
int f1[202]={0};
bool cmp(b a,b b){
	return a.v>b.v;
}
int main(){
	int n,num=0,ans=0,maxn=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&B[i].t);
	}
	for(int i=0;i<n;i++){
		scanf("%d",&B[i].v);
	}
	sort(B,B+n,cmp);
	for(int j=0;j<n;j++){
		if(!f[B[j].t][B[j].v]){
		ans+=B[j].v;
		f[B[j].t][B[j].v]=1;
	}
		if(!f1[B[j].t]){
			num++;
			f1[B[j].t]=1;
		}
		maxn=max(maxn,ans*num); 
	}
	printf("%d",maxn);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值