| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 750 人关注过本帖
标题:拔河比赛任务
只看楼主 加入收藏
sunshineboy1
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2013-5-24
结帖率:75%
收藏
 问题点数:0 回复次数:1 
拔河比赛任务
题目如下:

haha的学校要举行拔河比赛,为了在赛前锻炼大家,老师决定把班里所有人分为两拨,进行拔河。因为分组的目的是为了进行锻炼,所以为了避免其中一方的实力过强,因此老师决定以体重来划分队伍,尽量保持两个队伍的体重差最少。但是老师对于如何划分队伍并不感兴趣,他只要知道最小的体重差是多少就行了。这个受苦受累的任务就交给haha了,但是仅仅知道体重依然难以确定到底如何分配队伍才能使得队伍双方的体重差最少,请你编写程序帮助haha完成这个任务。
Input
输入数据包含2行,第一行为人数N(1 <= N <= 100),第二行包含N个数分别代表N个人的体重M(1 <= M <= 100)。
Output
输出只包含一个数字,代表按照要求分组后,两组队伍之间最小体重差。
Sample Input
4 10 23 41 12
Sample Output
4
Time Limit
10000MS
Memory Limit
65536KB
搜索更多相关主题的帖子: 编写程序 如何 学校 
2013-07-11 12:47
sunshineboy1
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2013-5-24
收藏
得分:0 
这是我自己写的一段代码,用01背包来实现的:#include<stdio.h>
int a[100];
void main()
{
    int choose(float bb,int N);
    int N,i;float bb=0.0;
    printf("enter N:");
    scanf("%d",&N);
    printf("enter %d weight:",N);
    for(i=1;i<=N;i++)
        scanf("%d",&a[i]);
    for(i=1;i<=N;i++)
        bb=a[i]+bb;
    bb=bb/2;
   
    printf("%d",choose(bb,N));
   
}
int choose(float bb,int N)
{
    int i,j;
    int b[100][100];
    for(i=0;i<=N;i++)
        for(j=0;j<=bb;j++)
            b[i][j]=0;
    for(i=0;i<=bb;i++)
    {
        b[0][i]=i;
    }
    for(i=1;i<=N;i++)
        for(j=1;j<=bb;j++)
        {
            if(j>=a[i])
            {
                if(b[i-1][j-a[i]]<=b[i-1][j])
                    b[i][j]=b[i-1][j-a[i]];
                else
                    b[i][j]=b[i-1][j];
            }
            else
                b[i][j]=b[i-1][j];
        }
        return(bb>(int)bb?b[i-1][j-1]*2+1:b[i-1][j-1]*2);

}先求出总体重/2,在进行背包枚举,还有如果定义数组长度b[100][5000]没错吧,怎么运行就发送错误报告
2013-07-11 12:53
快速回复:拔河比赛任务
数据加载中...
 
   



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

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