使用暴力双层for循环遍历所有的可能性
#include <iostream>
#include <vector>
#include <list>
using namespace std;
// 最多购买宝石个数
static void HuaWei_OD_test19(void)
{
int gems_cnt;
cin >> gems_cnt;
vector<int> gems_price_vec;
int tmp;
for (int i = 0; i < gems_cnt; i++)
{
cin >> tmp;
gems_price_vec.push_back(tmp);
}
int has_money;
cin >> has_money;
list<int> gems_buy_cnt_list; // 不同采购方案所买到的宝石个数组成的链表
for (int i = 0; i < gems_cnt; i++)
{
int cost = 0;
for (int j = i; j < gems_cnt; j++)
{
if (cost < has_money)
{
// 如果再买一件就超支
if ((cost + gems_price_vec[j]) >= has_money)
{
// 两种情况:情况1,相加==has_money
if ((cost + gems_price_vec[j]) == has_money)
gems_buy_cnt_list.push_back(j - i + 1);
else // 情况2,相加>has_money
gems_buy_cnt_list.push_back(j - i);
cost = 0;
break;
}
else
{
cost += gems_price_vec[j];
}
}
}
}
gems_buy_cnt_list.sort();
cout << gems_buy_cnt_list.back() << endl;
}
int main()
{
HuaWei_OD_test19();
return 0;
}