uva562Dividing Coins

简介: 题意:给出n枚硬币,每个硬币有自己的面值,将这些硬币均分,有时无法均分,求分出来的两份硬币的最小差值 分析:统计总面值然后用总面值的一半作为背包容量,01背包。 代码: View Code 1 #include 2 #include 3 #include 4 #i...

题意:给出n枚硬币,每个硬币有自己的面值,将这些硬币均分,有时无法均分,求分出来的两份硬币的最小差值

分析:统计总面值然后用总面值的一半作为背包容量,01背包。

代码:

View Code
 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <math.h>
 4 #include <string.h>
 5 using namespace std;
 6 const int MAXN = 50000;
 7 const int INF = 0x3f3f3f3f;
 8 #define DEBUG
 9 int c[MAXN];
10 int dp[MAXN];
11 int max(int a, int b){
12     return a>b?a:b;
13 }
14 int main(){
15 #ifndef DEBUG
16     freopen("in.txt", "r", stdin);
17 #endif
18     int n, m, i, j, k;
19     scanf("%d", &n);
20     for(i=0; i<n; i++){
21         scanf("%d", &m);
22         int sum=0;
23         memset(dp, 0, sizeof(dp));
24         for(j=1; j<=m; j++){
25             scanf("%d", &c[j]);
26             sum+=c[j];
27         }
28         int sum1 = sum/2;
29         for(j=1; j<=m; j++)
30             for(k=sum1; k>=c[j]; k--)
31                 dp[k]=max(dp[k], dp[k-c[j]]+c[j]);
32         printf("%d\n", sum-2*dp[sum1]);
33     }
34     return 0;
35 }

 

目录
相关文章
UVa11679 - Sub-prime
UVa11679 - Sub-prime
70 0
uva167 The Sultan's Successors
uva167 The Sultan's Successors
50 0
|
人工智能
|
人工智能 BI 算法
|
人工智能
uva 305 Joseph
点击打开链接uva 305 思路: 数学+打表 分析: 1 传统的约瑟夫问题是给定n个人和m,每次数m次把当前这个人踢出局,问最后留下的一个人的编号 2 这一题是前k个人是好人,后面k个是坏人。
1052 0
uva 562 Dividing coins (0/1背包)
点击打开链接uva 562 思路: 0/1背包 分析: 1 题目意思是有两个人分n个金币,要求最后两个人的金币差值最小 2 我们利用背包的思想即背包的总容量为金币总和的一半,去求出可以放入背包的最大的金币(这里其实就是某一个人能获得的最大...
835 0