| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7679 人关注过本帖, 1 人收藏
标题:贪心算法求解这道题
只看楼主 加入收藏
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
建议了解一下bin packing problem,可能就会更明白我们在干什么了。

大开眼界
2015-06-09 15:42
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 35楼 lianyicq

突然觉得自己很无知。
我是不是忙活半天,根本就没理解一楼题意?其实什么0/1背包、什么bin packing problem,我是通通不知道的,还是在这个帖子里才第一次接触。哎,土八路就是土八路啊,理论知识极端欠缺。
我是真心极端佩服算法高手的,还极端佩服数学大师。我始终认为,只有数学好,才能玩转计算机算法,才能真正有牛叉去碰人工智能,可惜数学是我弱项。还好有百度老师,要抓紧时间学啊。
扯远了。有机会还是喜欢做些有难度的算法题,可乘机向高手学习!
一并回答34楼:空下来会学学c++ stl的,但一看到各种类就莫名其妙的累,学不进去。

[ 本帖最后由 wmf2014 于 2015-6-9 17:56 编辑 ]

能编个毛线衣吗?
2015-06-09 16:14
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
我觉得
就算是知道学海无涯,也得继续划船吧。
反正都会提高自己

大开眼界
2015-06-09 16:18
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 36楼 wmf2014
这道题 求的是全子集
程序代码:
vector<int> items = {3, 4, 6, 3, 7, 9, 45, 2, 10};
vector<bool> isSelect(9);
vector<int> selected(9);

int cap = 45;
int selectedMax = 0;

void divide(int depth)
{
    if (depth == items.size())
    {
        int sum = 0;
        
        for (int i = 0; i < depth; i++)
        {
            if (isSelect[i])
            {
                sum += items[i];
            }
        }
    
        if (sum <= cap && sum > selectedMax)
        {
            selected.clear();
            
            for (int i = 0; i < depth; i++)
            {
                if (isSelect[i])
                {
                    selected.push_back(items[i]);
                }
            }
            
            selectedMax = sum;
        }
    }
    else
    {
        isSelect[depth] = false;
        divide(depth+1);
        isSelect[depth] = true;
        divide(depth+1);
    }
}

int main(void)
{
    int count = 0;
    
    while (true)
    {
        count++;
        divide(0);
        
        for (int i = 0; i < selected.size(); i++)
        {
            for (int j = 0; j < items.size(); j++)
            {
                if (items[j] == selected[i])
                {
                    items.erase(items.begin()+j);
                }
            }
        }
        
        if (items.size() == 0)
        {
            break;
        }
        
        selectedMax = 0;
        
        isSelect.clear();
        isSelect.resize(items.size());
        
        selected.clear();
        selected.resize(items.size());
    }
    
    return 0;
}

我就是真命天子,顺我者生,逆我者死!
2015-06-10 16:03
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
0/1 背包的优化,还要等我分析完子集树才能写出来

我就是真命天子,顺我者生,逆我者死!
2015-06-10 16:14
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 39楼 BlueGuy
38楼的垃圾是你自己删啊,还是我帮你删呢?

重剑无锋,大巧不工
2015-06-10 16:51
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 40楼 beyondyf
不用你删,

我就是真命天子,顺我者生,逆我者死!
2015-06-10 17:13
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
如果版主无理由删贴,可以找论坛管理员 "静夜思" 把帖子从回收站调出来

我就是真命天子,顺我者生,逆我者死!
2015-06-10 17:16
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 38楼 BlueGuy
vc6无法通过编译,提示不能初始化:cpp(5) : error C2552: 'items' : non-aggregates cannot be initialized with initializer list
我没有其他编译器。

能编个毛线衣吗?
2015-06-10 17:18
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 42楼 BlueGuy
傻孩子,让你删是为你好,免得让那坨错误百出代码沦为笑柄。你不嫌丢人就挂着吧

重剑无锋,大巧不工
2015-06-10 17:29
快速回复:贪心算法求解这道题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017764 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved