分水果 DP(2015年 JXNU_ACS 算法组暑假第一次周赛)

分水果

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 16   Accepted Submission(s) : 7

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

给定n个水果,每个水果都有一个重量,分成两堆,怎么分才使得分得的重量差值最小?

Input

输入有多组数据,数据都为整数,每组数据第一行输入水果个数n(1<=n<=10^3),接下来一行输入n个重量wi(0<=wi<=10^2)。

Output

对每组输入输出一行,输出可以得到的最小差值。

Sample Input

5
10 20 30 10 10 

Sample Output

0

Author

吴迎



Statistic | Submit | Back

一个简单的完全背包问题

#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
	int n,dp[100005],a[1005],sum;
	while(scanf("%d",&n)!=EOF)
	{
		memset(dp,-100,sizeof(dp));//都先初始为最小值
		memset(a,0,sizeof(a));
		dp[0]=sum=0;//dp[0]=0;
		for(int i=0;i<n;i++)
		scanf("%d",&a[i]),sum+=a[i];
		int max=-1;
		for(int i=0;i<n;i++)
		for(int j=sum/2;j>=a[i];j--)//要从大往小
		{
			dp[j]=dp[j-a[i]]+a[i];
			if(dp[j]>max)
			max=dp[j];
		}
		int cha=sum-2*max;
		if(cha<0)
		printf("%d\n",-cha);
		else
		printf("%d\n",cha);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-23 04:17:53

分水果 DP(2015年 JXNU_ACS 算法组暑假第一次周赛)的相关文章

区间最小值 线段树 (2015年 JXNU_ACS 算法组暑假第一次周赛)

区间最小值 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 12   Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 给定一个数字序列,查询随意给定区间内数字的最小值. Input

区间最小值(2) (线段树 更新区间)2015年 JXNU_ACS 算法组暑假第一次周赛

区间最小值(2) Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 26   Accepted Submission(s) : 9 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 给定一个数字序列以及一些操作,查询任意给定区间内数字的最小

递减打印最大的N位数到1 (2015年 JXNU_ACS 算法组暑假第一次周赛)

递减打印最大的N位数到1 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 21   Accepted Submission(s) : 4 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 给定一个数字N,M,递减打印最大的N位数到1的前M

一位数 (2015年 JXNU_ACS 算法组暑假第一次周赛)

一位数 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 17   Accepted Submission(s) : 9 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 对于一个正整数,递归使用如下的规则总是可以使它成为一位数,这个规则是

2015 年 JXNU_ACS 算法组寒假第二次周赛

2015 年 JXNU_ACS 算法组寒假第二次周赛 比赛链接:http://acm.hdu.edu.cn/diy/contest_show.php?cid=26246 Start Time : 2015-02-01 13:00:00 End Time : 2015-02-01 17:30:00 终榜:http://acm.hdu.edu.cn/diy/contest_ranklist.php?cid=26246&page=1 这次比赛考查的知识都很基础,甚至还有几道就是C语言基础(比如1006

2015/10/13 算法习题:最大子列和问题

已经正式开始学习数据结构和算法,先学了网易云课堂上的浙江大学的数据结构课,是陈越和何钦铭上的,了解了什么是数据结构和算法后,学习了一些时间空间复杂度分析的技巧,结合之前马虎掌握的学习,先从简单的题目入手学习. 题目是这样的: 给定了一个n个整数组成的序列,求它各个子列中,子列和最大的值. 输入:输入n个整数组成的序列 要求输出最大子列和. 示例: 输入: -2 11 -4 13 -5 -2 输出: 20 做出这题的难度不是很大,至少很容易可以做到暴力求解,然而暴力求解的时间复杂度是很大的. 我用

分治法、动态规划、贪心算法区别

1.分治法 算法思想:将原问题划分成若干个规模较小而结构与原问题相似的子问题,递归的解决这些子问题,然后再合其结果,就得到原问题的解 特征: 该问题的规模缩小到一定的程度就很容易解决 该问题可以分解为若干个规模较小的相同问题,即改问题具有最优子结构性质 利用该问题分解出的子问题的解可以合并为该问题的解: 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题 2.动态规划 算法思想:与分治法相似,也是通过组合子问题的解而解决整个问题.区别是,动态规划适用于分解得到的子问题往往不是

openjudge6047分蛋糕[DP]

描述 有一块矩形大蛋糕,长和宽分别是整数w .h.现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形.且长和宽均为整数.切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕.请计算:最后得到的m块小蛋糕中,最大的那块蛋糕的面积下限. 假设w= 4, h= 4, m= 4,则下面的切法可使得其中最大蛋糕块的面积最小. 假设w= 4, h= 4, m= 3,则下面的切法会使得其中最大蛋糕块的面积最小: 输入共有多行,每行表示一个测试案例.每行是三个用空格分开的整数w, h, m ,其中1 ≤ w, h, m

算法复习笔记(分治法、动态规划、贪心算法)

分治法 动态规划 贪心算法 分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的问题,这些子问题互相独立且与原问题相同(所以可以递归).递归地解这些子问题,然后将各个子问题的解合并得到原问题的解.它的一般算法设计模式如下: divide-and-conquer(P) { //|P|表示问题的规模,n0表示阈值,当规模不超过n0时,问题容易解出,不必分解 if(|P|<=n0) adhoc(P); //将P分解成子问题 divide P into smaller subinstanc