免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sequencing
打印 上一主题 下一主题

euler project第18题求解 [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
11 [报告]
发表于 2012-06-12 03:57 |只看该作者
回复 9# sequencing


    暴力解法(gawk 4.0.0):
  1. gawk '{for(i=1;i<=NF;i++)a[NR][i]=$i}
  2. END{f(a[1][1],a[1][1],1,1);print max,cob}
  3. function f(sum,com,x,y){
  4. if(x==NR){print sum,com;if(max<sum){max=sum;cob=com};return -1}
  5. else{if(a[x+1][y]>=a[x+1][y+1]){
  6.   f(sum+a[x+1][y],com FS a[x+1][1],x+1,y)
  7.   f(sum+a[x+1][y+1],com FS a[x+1][1],x+1,y+1)}
  8. else{
  9.   f(sum+a[x+1][y+1],com FS a[x+1][1],x+1,y+1)
  10.   f(sum+a[x+1][y],com FS a[x+1][1],x+1,y)}
  11. }
  12. }'
复制代码

论坛徽章:
0
12 [报告]
发表于 2012-06-12 10:28 |只看该作者
本帖最后由 jils2013 于 2012-06-12 10:55 编辑

逻辑:路由数量等于2^n个;对每个数字做2进制转化,然后藉此作左右摆动控制路由

简单修改了逻辑,打印出路由经过的数字。
  1. [root@localhost shell]# cat -vte file1
  2.                             75$
  3.                           95  64$
  4.                         17  47  82$
  5.                       18  35  87  10$
  6.                     20  04  82  47  65$
  7.                   19  01  23  75  03  34$
  8.                 88  02  77  73  07  63  67$
  9.               99  65  04  28  06  16  70  92$
  10.             41  41  26  56  83  40  80  70  33$
  11.           41  48  72  33  47  32  37  16  94  29$
  12.         53  71  44  65  25  43  91  52  97  51  14$
  13.       70  11  33  28  77  73  17  78  39  68  17  57$
  14.     91  71  52  38  17  14  91  43  58  50  27  29  48$
  15.   63  66  04  68  89  53  67  30  73  16  69  87  40  31$
  16. 04  62  98  27  23  09  70  98  73  93  38  53  60  04  23$
  17. [root@localhost shell]# awk 'function binary(num){str="";while(num!=0){str=num%2str;num=int(num/2);};return sprintf("%0"bn"d",str)}
  18.          {bn=NR;for(i=1;i<=NF;i++)ar[NR,i]=$i;}
  19.          END{for(i=0;i<2^bn;i++)
  20.                   {split(binary(i),bit,"");list="";
  21.                    for(n=1;n<=bn;n++){if(n==1){r=1}else{r+=bit[n]};sum[i]+=ar[n,r];list=list" "ar[n,r]};
  22.                    if(sum[i]>max){max=sum[i];maxlist=list}
  23.                   }
  24.                    print max,maxlist;
  25.                }' file1
  26. 1074  75 64 82 87 82 75 73 28 83 32 91 78 58 73 93   
复制代码

论坛徽章:
0
13 [报告]
发表于 2012-06-12 10:40 |只看该作者
yinyuemi 发表于 2012-06-12 03:57
回复 9# sequencing


能说下具体逻辑吗?我看了会,晕了

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
14 [报告]
发表于 2012-06-12 13:01 |只看该作者
回复 13# jils2013


    用递归遍历全部可能路径,每次走完一次,计算总和,并和当前的最大值比较,之后保存路径和总和

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
15 [报告]
发表于 2012-06-12 18:35 |只看该作者
本帖最后由 jason680 于 2012-06-12 19:39 编辑

回复 1# sequencing

how about this
$ awk '{for(n=0;n++<NF;)s[NR,n]=a[NR,n]=$n}END{c[0,0]=1;for(n=NR;n>1;n--)for(t=0;++t<n;)if(s[n,t]>s[n,t+1]){c[n-1,t]=t;s[n-1,t]+=s[n,t]}else{c[n-1,t]=t+1;s[n-1,t]+=s[n,t+1]};m=0;for(n=0;n++<NR;){for(p=NR-n;p-->0;)printf "  ";for(t=0;t++<n;){if(c[n-1,m]==t)a[n,t]="\033[31m"a[n,t]"\033[0m";printf a[n,t]"  "};m=c[n-1,m];print ""}print "max="s[1,1]}' ep18




# for min   
$ awk '{for(n=0;n++<NF;)s[NR,n]=a[NR,n]=$n}END{c[0,0]=1;for(n=NR;n>1;n--)for(t=0;++t<n;)if(s[n,t]<s[n,t+1]){c[n-1,t]=t;s[n-1,t]+=s[n,t]}else{c[n-1,t]=t+1;s[n-1,t]+=s[n,t+1]};m=0;for(n=0;n++<NR;){for(p=NR-n;p-->0;)printf "  ";for(t=0;t++<n;){if(c[n-1,m]==t)a[n,t]="\033[31m"a[n,t]"\033[0m";printf a[n,t]"  "};m=c[n-1,m];print ""}print "min="s[1,1]}' ep18

论坛徽章:
0
16 [报告]
发表于 2012-06-12 20:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
17 [报告]
发表于 2012-06-12 21:13 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP