| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2465 人关注过本帖, 2 人收藏
标题:求一个题目的答案,本人是菜鸟,想了很久没想出!
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
???怎么了?

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-11-03 14:51
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
回复 38楼 StarWing83
新题代码:分割法
程序代码:
#include <stdio.h>
int main(void)
{
 int i,j,k,*p,max,len,flag=1,a[1000];
 long sum=1,t,m,n,b[1000]={0};
 scanf("%d%d",&max,&len);
 for(i=0;i<len;i++)
   scanf("%d",&a[i]);
 p=a;
 k=len==1?a[0]-1:max;
 do{
    m=1;
    for(i=0;i<k+1;i++) b[i]=0;
    for(i=len;i>0;i--)
      {
       for(j=0,n=0;j<k;j++,m-=t)
     {t=b[j],b[j]=m-t,n+=b[j];}
       m=n,sum+=n;
       k=i==2?p==a?p[0]-1:p[0]-(p[-1]+2):flag?k-1:k;
      }
    if(flag)flag=0;
    for(i=1,n=1;i<len;i++)
      if(p[i]-(p[0]+i)==0)n++;
      else break;
    if(n>=len)break;
    len-=n,k=len==1?p[1]-p[0]-1:max-(p[0]+(len-1)),p+=n;
   }while(1);

 printf("=%ld\n",sum);
 getch();
 return 0;
}
如输入:
26 2 2 3
=52
·
26 5 22 23 24 25 26
=83681
·
26 26 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
=67108863
·

努力—前进—变老—退休—入土
2009-11-03 15:10
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
恩,不错不错,做到平方级的算法了,讲讲原理?

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-11-03 15:17
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 43楼 StarWing83
代码都给你了, 你还看不懂吗??

我就是真命天子,顺我者生,逆我者死!
2009-11-03 15:19
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
字面还真不好细说我的方法,大至就是分割,看能不能用图割给你看。

努力—前进—变老—退休—入土
2009-11-03 15:26
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
回复:BlueGuy
前面的29楼StarWing83就有个很好的代码,只稍为改下就是新题的答案,只是我的方法不同,写的代码很绕,有抽一丝动全身的感觉,不是很好看懂,要再过些日子怕连我都看不懂了。

努力—前进—变老—退休—入土
2009-11-03 15:36
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1697
专家分:4305
注 册:2007-12-27
收藏
得分:0 
佩服佩服
俺不动脑筋已经很久了

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2009-11-03 16:09
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
说下我的方法:
下面拿原题来说,26个字母,只要是有序的阶梯型就能用快速方法求得,abc、hijk、vwxyz都是有序阶梯型。对于没序阶梯型如:acd bjmt abclmnrst 就要把它分割成一个个有序阶梯型,这样就能快速算出对应的数。
分割如图:
图片附件: 游客没有浏览图片的权限,请 登录注册

这样可以把一个无序阶梯型分割成N个有序阶梯型,再对N个有序阶梯型求值,对于怎么求一个有序阶梯型方法我上面代码可以看得出。

努力—前进—变老—退休—入土
2009-11-04 00:46
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS:我们的方法是一样的。你看看我的代码就知道了。

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-11-04 11:10
tiansky55
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-10-12
收藏
得分:0 
中间省略得我不知道怎么办了,感觉个问题要先把数据长度问题解决一下
2009-11-04 18:06
快速回复:求一个题目的答案,本人是菜鸟,想了很久没想出!
数据加载中...
 
   



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

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