贪心 B - BnPC 组队赛补题
题目
题意
给你n个单词并且他们给出他们的能力,然后让他们的能力>=后面的能力,给你k让你增加
分析
首先先让他们达到0,在进行贪心,如果他的带来的价值大于组数带来的价值,肯定是最优的,否则就用价值最大的
代码
#include
using namespace std;
typedef long long ll;
typedef pairPII;
const int N = 1e5 + 50;
ll n, k;
map sct;
int points[N], num[N];
int co[N];
ll Cont[N];
bool vis[N];
PII a[N];
signed main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
ios::sync_with_stdio(false);
cin >> n >> k;
for (int i = 1; i <= n; i++) {
string s;
int t;
cin >> s >> t;
sct[s] = i;
points[i] = t;
}
int l;
cin >> l;
for(int i=1;i<=l;i++) {
string s;
int t;
cin >> s >> t;
int x = sct[s];
num[x]++;
a[i]={x,t};
if (points[x] <= t) {
k -= t - points[x];
points[x] = t;
}
}
if (k < 0) {
cout << 0 << endl;
return 0;
}
ll res = 0;
int max_num = 0;
for (int i = 1; i <= n; i++) {
max_num = max(max_num, num[i]);
}
for(int i=1;i<=l;i++)
{
int xx=a[i].first,yy=a[i].second;
if(yy());
for (int i = 1; i <= n; i++) {
if (Cont[i] < max_num) break;
if (k) {
res += Cont[i];
k--;
} else
break;
}
if (k) {
res += (ll)k * max_num;
}
cout << res << endl;
return 0;
}