| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2017 人关注过本帖
标题:想了5天,还是不知道怎么写!求大神教我!
只看楼主 加入收藏
林沛那
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-3-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:13 
想了5天,还是不知道怎么写!求大神教我!
【问题描述】
A公司有一台钢管切割机提供钢管加工业务。钢管切割机每次可以将一根钢管按照要求在指定位置切割为2段。每次切割的费用为钢管的长度。
给定一根长度为L的钢管,要求将其在位置l1<l2<...<ln;处切割为的n+1段钢管,应如何切割才能使总切割费用最小。
【要求】
【数据输入】多组测试数据。
每组数据第1行有2个正整数L和n,L表示钢管的长度,n表示切割次数。第2行有n个正整数,表示切割位置l1<l2<...<ln。其中,0<L<5001,0<n<501。
【数据输出】最小切割总费用并换行.
【样例输入】
15 4
3 9 12 14
【样例输出】
33
搜索更多相关主题的帖子: 切割机 
2016-03-08 08:22
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
不明白这题的意思。
如果一定要按整数长度来切,还是例子中的15 4
那么这样切是不是总费用更少?
先在12处切为12+3 ,费用为15;
再切13处将3分为1+2,费用为3;
再切14处将2分为1+1,费用为2,总费用是20,比例子中的33少很多啊!
2016-03-08 09:43
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
就这想了5天?我给过你算法提示的,我刚刚用10分钟写代码,15分钟调试,已经通过你样例测试。再好好想想。
2016-03-08 09:59
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-03-08 10:06
林沛那
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-3-4
收藏
得分:0 
回复 4楼 拉链
你这个l+s+s什么意思,能不能给全部代码给我看下!
2016-03-08 13:51
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
这是个数学题吧

一片落叶掉进了回忆的流年。
2016-03-08 16:12
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
应该每次切尽可能长的长度

一片落叶掉进了回忆的流年。
2016-03-08 16:17
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
回复 2楼 grmmylbs
你砍3刀4段,长度分别为12、1、1、1,楼主题意是砍4刀5段,长度分别是3、6、3、2、1,你这理解的和题意不搭啊。
2016-03-08 18:37
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:10 
看来楼主的确是做不出来了,我帮你做作业吧:
程序代码:
#include <stdio.h>
int ff(int a[],int l,int s)
{
    int i,j,k;
    float m;
    for(i=0,j=0,k=1;a[i]>=0;i++)
    {
        j+=a[i];
        if(a[i]>0&&a[i]<l+s)k=0;  //有合适的切割点,k标记为0
    }
    if(!j||k)return 0;   //如果全部分段完成或没有合适的分段点则返回0
    for(i=0,j=s+l;a[i]>=0;i++)
    {
        m=(l+s+s)/2.0-a[i];
        if(m<0)m=-m;     //计算每个切割点和中点的误差  
        if(m<j)
        {
            k=i;
            j=m;         //比较每个切割点和中点的误差,找到最接近中点的切割点
        }
    }
    j=a[k];
    a[k]=0;
    return l+ff(a,j-s,s)+ff(a,l+s-j,j);  //对切割的每一段进行递归
}
void main()
{
    int a[100],i,l,n;
    scanf("%d%d",&l,&n);
    for(i=0;i<n;i++)scanf("%d",&a[i]);
    a[i]=-1;
    printf("%d\n",ff(a,l,0));
}
2016-03-08 18:40
hzxsyzl
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:68
注 册:2016-3-8
收藏
得分:0 
费用就是剪掉的长度的话,剪得越短,总费用越低啊。
2016-03-08 21:52
快速回复:想了5天,还是不知道怎么写!求大神教我!
数据加载中...
 
   



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

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