| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1295 人关注过本帖
标题:这个题目该怎么做.翻译一下.
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*赋上自己写的,大家帮着看一下,看哪里不符题意*/

#include<stdio.h>
#include<math.h>
typedef struct {
long data;
int flag;
}Blink;

Blink a[1000];
int Find_Min(Blink *a,int n,long m) //返回求的最小值
{
int k,i=0;
long t,min;
while(i<n&&a[i].flag==1)
{
i++;
}
//printf("%d\n",i);
if(a[i].data>m)
{
min=a[i].data-m;
}
else
{
min=m-a[i].data;
}
k=i;
i++;
while(i<n)
{
if(a[i].flag==0)
{
if(m>a[i].data)
{
t=m-a[i].data;
}
else
{
t=a[i].data-m;
}
if(min>t)
{
min=t;
k=i;
}
}
i++;
}
return(k);
}

long Sum(Blink *a,int n,long l)
{
long sum=0,num,t=0;
int i=0,k;
num=l;
while(i<n)
{
k=Find_Min(a,n,num);
a[k].flag=1;
//printf("%d :",k);
if(num>a[k].data)
{
t+=num-a[k].data;
}
else
{
t+=a[k].data-num;
}
//printf("%ld\n",t);
sum+=t;
num=a[k].data;
i++;
}
return(sum);
}

int main()
{
int i,n;
long l;
scanf("%d%ld",&n,&l);
for(i=0;i<n;i++)
{
scanf("%ld",&a[i].data);
a[i].flag=0;
}
printf("%ld\n",Sum(a,n,l));
return(0);
}


倚天照海花无数,流水高山心自知。
2006-10-27 17:30
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 

给你组数据:
5 30
4 21 28 35 36
你得到的答案是114.
但事实上还有更优的.
30->35->36->28->21->4
5+6+14+21+38=84
你可以说一下你的算法,
不过偶觉得这道题还是需要用动态规划解


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-10-27 19:08
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

没看懂

4 10
1
9
11
19


10->9->11->19->1
1+3+11+29=44

为什么不是1+2+8+18呢


2006-10-27 19:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用cwande在2006-10-27 19:08:46的发言:

给你组数据:
5 30
4 21 28 35 36
你得到的答案是114.
但事实上还有更优的.
30->35->36->28->21->4
5+6+14+21+38=84
你可以说一下你的算法,
不过偶觉得这道题还是需要用动态规划解

我也觉得.我用贪心算法.每次选定离当前位置的最小距离.直到每个地方都遍历过.
动态规划刚学,还没理解好.
能不能给个代码?

倚天照海花无数,流水高山心自知。
2006-10-27 20:49
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用我不是郭靖在2006-10-27 19:31:41的发言:

没看懂

4 10
1
9
11
19


10->9->11->19->1
1+3+11+29=44

为什么不是1+2+8+18呢

如果你看懂题目的话就知道了.我们说的陈年旧草是指从贝西开始走动到吃完这块草地所需的时间。


倚天照海花无数,流水高山心自知。
2006-10-27 20:50
快速回复:这个题目该怎么做.翻译一下.
数据加载中...
 
   



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

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