洛谷—— P2663 越越的组队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷—— P2663 越越的组队相关的知识,希望对你有一定的参考价值。
https://www.luogu.org/problem/show?pid=2663
题目描述
班级要组织一场综合能力竞赛,全班同学(N个,N是偶数)分成两队互相竞争。老师找到了越越并给了越越一张全班同学综合能力测试的成绩,要求他从全班同学中选出一半(他自己也可能被选),并要求这些同学综合能力测试的成绩之和在不超过班级总分一半的前提下尽量达到最高。这样分成的两队实力是最平均的。越越堆着满脸的笑容找到了你,你就帮他写一个程序吧。
输入输出格式
输入格式:
第一行:学生个数N;第二行开始的N行每行一个同学的综合能力测试的成绩。
输出格式:
输出一个数:N/2个同学的综合能力测试的成绩之和在不超过班级总分一半的前提下尽量达到的最高值。
输入输出样例
输入样例#1:
8 77 77 56 77 84 77 56 46
输出样例#1:
273
说明
样例解释:总分550;总分的一半275;选择4名同学56 77 84 56 77 达到总分273;273是不超过275的最大值。(另一队的和是277)两队实力最接近。
做总价值为总成绩一半的背包
1 #include <algorithm> 2 #include <cstdio> 3 4 using namespace std; 5 6 int n,MAX,a[2333],f[23333]; 7 8 int main() 9 { 10 scanf("%d",&n); 11 for(int i=1;i<=n;i++) 12 scanf("%d",a+i),MAX+=a[i]; 13 MAX=MAX+1>>1; 14 for(int i=1;i<=n;i++) 15 for(int j=MAX;j>=a[i];j--) 16 f[j]=max(f[j],f[j-a[i]]+a[i]); 17 printf("%d\n",f[MAX]); 18 return 0; 19 }
以上是关于洛谷—— P2663 越越的组队的主要内容,如果未能解决你的问题,请参考以下文章
洛谷P4180 [Beijing2010组队]次小生成树Tree
洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)