#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<list>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<algorithm>
#pragma warning(disable:4996)
using std::cin;
using std::cout;
using std::endl;
using std::stringstream;
using std::string;
using std::vector;
using std::list;
using std::pair;
using std::set;
using std::multiset;
using std::map;
using std::multimap;
using std::stack;
using std::queue;
using std::priority_queue;
vector<int>getItem(int n)
{
vector<int>item;
while (n--)
{
int m; cin >> m;
double sum_A = 0.0, sum_B = 0.0, sum_C = 0.0;
bool flag = true;
while (m--)
{
char character, colon; double money;
cin >> character >> colon >> money;
if (character == 'A')
{
sum_A += money;
}
else if (character == 'B')
{
sum_B += money;
}
else if (character == 'C')
{
sum_C += money;
}
else
{
flag = false;
}
}
if (flag&&sum_A <= 600.0&&sum_B <= 600.0&&sum_C <= 600.0&&sum_A+ sum_B+ sum_C<=1000.0)
{
item.push_back(100 * (sum_A+sum_B+sum_C));
}
}
return item;
}
int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
double m; int n;
while (cin >> m >> n&&n)
{
auto item = getItem(n);
vector<int>dp(m*100+1);
for (int i = 0; i < item.size(); i++)
{
for (int j = m * 100;j>=item[i]; j--)
{
dp[j] = std::max(dp[j], dp[j - item[i]]+item[i]);
}
}
printf("%.2lf\n", (double)dp[(int)(m * 100)] / 100.0);
}
return 0;
}
hdu_1864_最大报销额
最新推荐文章于 2020-03-29 17:26:12 发布