文章
1
粉丝
223
获赞
0
访问
8.7k
该题目测试用例有误,只有将最优值的初始化为 100000000000010 才能AC。(管理员已修正)
该题可以使用DP算法来解决。但我学习了他人的解法。从而使用“贪心 + 搜索”来解题,即优先选择单价最低的可乐类型。由于本题,可乐并非可以拆开零售,因此直接贪心难以求解。因此本题搜索可行解,通过贪心限定搜索范围。搜索策略如下:优先选择性价比最高的种类,如不能恰好凑够所需,则尝试多买一瓶当前种类的可乐,更新最优值;搜索进入下一层,尝试用性价比次之的可乐,满足所需,再次更新最优值,直到尝试过所有性价比的可乐;剪枝策略如下:如果某种性价比的可乐,恰好能满足所需,则没有必要尝试性价比更低的可乐,因为必定达不到最优解。
#include
#include
#define MAX 30
#define MAX_LL 100000000000010 // Fake Ans
#if 0
#define MAX_LL 9223372036854775806
#endif
using namespace std;
struct kele
{
int price, volume;
double uprice;
} buff[MAX];
bool cmp(const kele &a, const kele &b)
{
return a.uprice < b.uprice;
}
int main(int argc, char const *argv[])
{
int num, require, volume;
while (cin >> num >> require)
{
volume = 1;
for (size_t i = 0; i < num; i++)
{
cin >> buff[i].price;
buff[i].volume = volume;
buff[i].uprice = (double)buff[i].pric...
登录后发布评论
感谢提醒,数据已修正