| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4197 人关注过本帖, 3 人收藏
标题:一个算法的问题,目测是DFS?
只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 C_printf

得,再多说什么就成欺负你了。以后把问题看仔细了、想清楚了再写代码,编程是件很严谨的事。

扫了一眼你的代码,我没看见广搜的影子,或者说你认为的广搜那就不叫广搜。

另外为了从向量里删个元素用不着那么费劲,v.erase(v.begin() + i)就够了。

重剑无锋,大巧不工
2014-01-13 22:57
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
楼主提交一下我这段代码
程序代码:
#include <stdio.h>
#include <stdlib.h>

int cmp(const void * a, const void * b)
{
    return ((int *)a)[1] - ((int *)b)[1];
}

int main()
{
    int n, s[16][2], t, c, mi, mv, i;
    for(; scanf("%d", &n) != EOF; printf("%d\n", n))
    {
        for(i = 0; i < n; scanf("%d", &s[i++][0]));
        for(i = 0; i < n; scanf("%d", &s[i++][1]));
        scanf("%d", &t);

        qsort(s, n, sizeof(s[0]), cmp);
        for(c = s[n - 1][1] - s[0][1], i = 0; i < n; c += s[i++][0]);

        for(i = 0; c > t; c -= mv, n--)
        {
            mv = s[0][0];
            mi = 0;
            if(n == 1) continue;
            mv += s[1][1] - s[0][1];
            for(i = 1; i < n - 1; i++)
                if(mv < s[i][0]) mv = s[mi = i][0];
            i = s[i][0] + s[i][1] - s[i - 1][1];
            if(mv < i) mv = i, mi = n - 1;
            for(i = mi; i < n; i++)
            {
                s[i][0] = s[i + 1][0];
                s[i][1] = s[i + 1][1];
            }
        }
    }
    return 0;
}

重剑无锋,大巧不工
2014-01-13 23:34
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
收藏
得分:0 
好吧 我调试一下,修改了一句,楼主也贴一下我的代码
程序代码:
#include <vector>
using namespace std;

void de(vector<pair<int,int>>& data,int i)
{
    int ii = 0;
    vector<pair<int,int>>::iterator it = data.begin();
    while(data.end()!=it)
    {
        if(ii++ == i){data.erase(it);break;}
        it++;
    }
}
int ca(vector<pair<int,int>>& data,int d)
{
    unsigned int ret = -1;
    int index = 0;
    for (int i = 0; i < data.size(); i++)
    {
        int r = data[i].first + abs(data[i].second - d);
        if(r<ret)
        {
            ret = r;
            index = i;
        }
    }
    return index;
}
int ss(vector<pair<int,int>> data,int last,int time)
{
    if(data.size()<=0)return 0;
    int i = ca(data,last);
    int a = data[i].second;
    int t = time - data[i].first - abs(data[i].second - last);
    if(t<0) return data.size();
    de(data,i);
    if(t==0) return data.size();
    return ss(data,a,t);
}

int s(int* d,int* t,int nums,int time)
{
    unsigned int ret = -1;
    vector<pair<int,int>> datar;
    for (int i = 0; i < nums; i++)
        datar.push_back(make_pair(d[i],t[i]));
    for (int i = 0; i < nums; i++)
    {
        vector<pair<int,int>> data = datar;
        int pa1 = data[i].second;
        int pa2 = time-data[i].first;
        de(data,i);
        int retss = ss(data,pa1,pa2);
        ret = retss<ret?retss:ret;
    }
    return ret;
}


int main()
{
    int d[16];
    int t[16];
    int tl;
    int n;
    while(scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
            scanf("%d",&d[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&t[i]);
        scanf("%d",&tl);
        printf("%d",n-s(d,t,n,tl));
    }
}
2014-01-14 09:52
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
收藏
得分:0 
回复 42楼 beyondyf
删除vector的我学习了。
我是没怎么调试而已。
我确实是有广搜的思路,不知道你为何看不出来。
我说下,你指点一二吧。还有,我个人觉得你效率没我的高。
我有5个数,我第一次遍历5个数,取一个,剩下4个数,然后遍历4个数,以此类推。
当我搜到正确答案时,我走的路径是一棵树,但是也可能没到树根就有正确答案了。
2014-01-14 10:01
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
以下是引用C_printf在2014-1-14 10:01:09的发言:

删除vector的我学习了。
我是没怎么调试而已。
我确实是有广搜的思路,不知道你为何看不出来。
我说下,你指点一二吧。还有,我个人觉得你效率没我的高。
我有5个数,我第一次遍历5个数,取一个,剩下4个数,然后遍历4个数,以此类推。
当我搜到正确答案时,我走的路径是一棵树,但是也可能没到树根就有正确答案了。
好一个个人觉得你的效率没我的高,  我是水平不够, 之前都不好说你,
现在我想说一下, 你看得懂版主的代码!? 别说看懂, 你能分析一二??
别和我比, 我要说的是:知人者智, 自知者明.
首先要有一颗谦虚的心.
2014-01-14 10:13
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
都是高手,百家争鸣挺好,小菜围观一下,哈哈
2014-01-14 10:54
dongshimou
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:44
专家分:152
注 册:2014-1-8
收藏
得分:0 
回复 42楼 beyondyf
瞄了下。貌似是背包?
2014-01-14 12:36
dongshimou
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:44
专家分:152
注 册:2014-1-8
收藏
得分:0 
回复 42楼 beyondyf
滚动数组来DP?
2014-01-14 12:37
冬冬123
Rank: 2
等 级:论坛游民
帖 子:80
专家分:67
注 册:2013-3-3
收藏
得分:0 
吵毛线,切磋不要伤和气,大家都是c友么

天下寒士俱欢言!!!
2014-01-14 14:32
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
收藏
得分:0 
回复 42楼 beyondyf
你这种大量使用复合语句的做法我并不是很赞同。高手并不是一定要这样写代码的。
你自己肯定能看懂你的代码,但是别人看起来很费劲。
你出书这样写能行?
2014-01-15 10:07
快速回复:一个算法的问题,目测是DFS?
数据加载中...
 
   



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

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