| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 612 人关注过本帖
标题:北大poj1190题讨论中的代码,求大神解释
只看楼主 加入收藏
hunanlzg
Rank: 2
等 级:论坛游民
帖 子:11
专家分:43
注 册:2012-3-17
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:4 
北大poj1190题讨论中的代码,求大神解释
北大poj 1190题目讨论里面的源代码,小弟看不懂,求大神解释下, 尽可能把注解写得详细些
#include<stdio.h>
#define in(a,b) (a<b?a:b)
int n,m;
int minv[21],mins[21];
int bests;

void dfs(int v,int s,int level,int r,int h)        //这个函数请详细点解释
{
    if(level==0)
    {
        if(v==n && s<bests)
            bests=s;
        return ;
    }
    if(v+minv[level-1]>n || s+mins[level-1]>bests || 2*(n-v)/r+s>=bests)                //如果把中括号内的level-1都换成level就是32ms
        return ;
    int i,j,hh;
    for(i=r-1;i>=level;i--)
    {
        if(level==m)
            s=i*i;
        hh=in((n-v-minv[level-1])/(i*i),h-1);
        for(j=hh;j>=level;j--)                     
            dfs(v+i*i*j,s+2*i*j,level-1,i,j);
    }
            
}

int main()
{
    int i;
    minv[0]=0;
    mins[0]=0;
    for(i=1;i<=20;i++)
    {
        minv[i]=minv[i-1]+i*i*i;                    //为什么要这样赋处值
        mins[i]=mins[i-1]+2*i*i;
    }
    while(scanf("%d%d",&n,&m)==2)
    {
        bests=0x7fffffff;            //为什么要最大
        dfs(0,0,m,n+1,n+1);
        if(bests==0x7fffffff)        
            printf("0\n");
        else
            printf("%d\n",bests);
    }
    return 0;
}
搜索更多相关主题的帖子: 北大 include 源代码 return 
2012-03-20 22:58
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:17 
这个是搜索的优化中的经典题,网上应该有解答的貌似
2012-03-20 23:26
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:17 
有趣的题目。应用的算法就是回溯法。在状态空间配合剪枝进行穷搜。

重剑无锋,大巧不工
2012-03-22 15:43
hunanlzg
Rank: 2
等 级:论坛游民
帖 子:11
专家分:43
注 册:2012-3-17
收藏
得分:0 
回复 3楼 beyondyf
能将详细点吗? 就是他判断的几个地方的条件我不知道是怎么来得
2012-03-22 22:28
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:17 
回溯...

编程之路定要走完……
2012-03-22 23:48
快速回复:北大poj1190题讨论中的代码,求大神解释
数据加载中...
 
   



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

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