ural 1005 Stone Pile

来源:互联网 发布:php mysql环境搭建 编辑:程序博客网 时间:2024/04/29 01:16

1005. Stone Pile

Time limit: 1.0 second
Memory limit: 64 MB
You have a number of stones with known weights w1, …, wn. Write a program that will rearrange the stones into two piles such that weight difference between the piles is minimal.

Input

Input contains the number of stones n (1 ≤n ≤ 20) and weights of the stones w1, …,wn (integers, 1 ≤ wi ≤ 100000) delimited by white spaces.

Output

Your program should output a number representing the minimal possible weight difference between stone piles.

Sample

inputoutput
55 8 13 27 14
3
Problem Source: USU Championship 1997
Tags: problem for beginners  (
hide tags for unsolved problems
)




题意:把一堆东西分成两堆,使其差值最小
转为01背包。。
#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <iostream>#include <algorithm>#include <queue>#include <map>#include <vector>using namespace std;int dp[1000005];  //数组必须开到100W以上int main(){    int n,i,j;    int a[25];    scanf("%d",&n);    memset(dp,0,sizeof(dp));    int ans=0;    for(i=0; i<n; i++)    {        scanf("%d",&a[i]);        ans+=a[i];    }    int sum=ans/2;    for(i=0; i<n; i++)    {        for(j=sum; j>=a[i]; j--)        {            dp[j]=max(dp[j],dp[j-a[i]]+a[i]);        }    }    printf("%d\n",ans-dp[sum]*2);    return 0;}


0 0
原创粉丝点击