zoukankan      html  css  js  c++  java
  • PID72 / 拔河比赛 (动态规划)

    http://www.rqnoj.cn/problem/72

    题目描述

    superwyh的学校要举行拔河比赛,为了在赛前锻炼大家,老师决定把班里所有人分为两拨,进行拔河因为为锻炼所以为了避免其中一方的实力过强老师决定以体重来划分队伍,尽

    量保持两个队伍的体重差最少,因为老师对结果没兴趣,所以只告诉老师最小的体重差是多少就行了。这个受苦受累的任务就交给superwyh了,因为这两天superwyh的后背间谍sjh

    闹肚子了,所以只好superwyh亲自去调查每个人的体重,但是仅仅知道体重依然难以确定到底如何分配队伍,请各位oier帮助superwyh出出主意。

    输入格式

    第一行为人数(1<=n<=100),从第二行开始是每个人的体重(0<=m<=100)。

    输出格式

    最小体重差。

    样例输入

    4
    10
    23
    41
    12

    样例输出

    4

    解题思路:

    要尽量把两边的人的体重均匀分布,就是让一边的人的重量接近总重量的一半,即容量为总重量一半的01背包问题。

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    using namespace std;
    #define N 10020
    int dp[N], a[N];
    int main()
    {
    	int n, sum, i, j, m;
    	scanf("%d", &n);
    	sum=0;
    	for(i=1; i<=n; i++)
    	{
    		scanf("%d", &a[i]);
    		sum+=a[i];
    	}
    	m=(sum+1)/2;
    	for(i=1; i<=n; i++)
    	{
    		for(j=m; j>=a[i]; j--)
    			dp[j]=max(dp[j], dp[j-a[i]]+a[i]);
    	}
    	printf("%d
    ", abs(sum-2*dp[m]));
    	return 0;
    } 
  • 相关阅读:
    Jlist的用法
    Swing中Timer定时器的使用
    埃氏筛法
    ACM排序题
    《C语言程序设计》9.6
    从字符串中提取数
    字符串排序
    树—线索二叉树的创建&二叉树的后序遍历&中序线索化&中序遍历线索二叉树
    《大话数据结构》中介绍的三种树的存储结构的表示方法的总结
    day08
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852717.html
Copyright © 2011-2022 走看看