文章

1

粉丝

223

获赞

0

访问

8.2k

头像
贪心+搜索(题目测试用例有误)
P1682 中南大学2018年机试题
发布于2021年3月8日 20:41
阅读数 8.2k

 该题目测试用例有误,只有将最优值的初始化为 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...
登录查看完整内容


登录后发布评论

2 条评论
admin SVIP
2021年3月8日 22:32

感谢提醒,数据已修正laugh

赞(0)

xuzf : 回复 admin: 不客气,您辛苦

2021年3月9日 17:42