《数据强大,搜索 0 0 分,请使用多重背包。》
code (AC)
#include<bits/stdc++.h>
using namespace std;
int n, m, ans;
struct node
{
int a;
int b;
int c;
int sum;
string name;
}bag[1002];
bool cmp(node a, node b)
{
return a.sum > b.sum;
}
int main()
{
cin >> m >> n;
m = 21 - m;
for(int i = 1; i <= n; i++)
cin >> bag[i].a >> bag[i].b >> bag[i].c >> bag[i].name;
for(int i = 1; i < n; i++)
for(int j = i + 1; j <= n; j++)
if(bag[i].name == bag[j].name)
if(bag[i].a + bag[j].a > bag[i].c)
bag[j].a += bag[i].a, bag[j].a -= bag[i].c, bag[i].a = bag[i].c;
else
bag[i].a += bag[j].a, bag[j].a = 0;
for(int i = 1; i <= n; i++)
bag[i].sum = bag[i].a * bag[i].b;
sort(bag + 1, bag + n + 1, cmp);
int i = 1;
while(m--)
ans += bag[i++].sum;
cout << ans;
return 0;
}
好一个“强大”法啊