码迷,mamicode.com
首页 > 其他好文 > 详细

南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 G

时间:2018-05-20 15:22:41      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:大学   mod   ++   #define   要求   psi   targe   blank   tor   

链接:https://www.nowcoder.com/acm/contest/122/G
来源:牛客网

题目描述

阿汤同学为了准备下学期的 ACM-ICPC,刷了很多的题目,他觉得自己已经比较厉害了,于是想出个题目考考你。现在他给你一个数组 A,问你是否能将该数组划分成数组 B、C 使得 B 数组的平均数和C 数组的平均数相等,数组 B 和 C 都不能为空。

输入描述:

从标准输入读入数据。
输入包含多组数据,第一行一个整数 T 代表数据组数。接下来依次描述每组数据,对于每组数据:
第一行输入正整数 N,第二行输入 N 个非负整数

1≤|A|≤30 (数组 A 的长度范围在 1 到 30 之间 )
0≤A[i]≤10000 (数组 A 中的元素)

输出描述:

输出到标准输出。
对于每组数据,输出一行:
如果能划分成满足题目要求的数组 B 和 C 则输出 yes,否则输出no
示例1

输入

1
8
1 2 3 4 5 6 7 8

输出

yes

说明

样例说明:将数组 A 划分成【1,4,5,8】和【2,3,6,7】,平均数为 4.5
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define MAXN 2001000
 4 #define PSIZE 100000
 5 bool Average(vector<int>& A) {
 6         static bool dp[2][16][300001];
 7         int sum = 0;
 8         for (int a: A) sum += a;
 9 
10         int N = A.size();
11         memset(dp, 0, sizeof(dp));
12         for (int n = 0; n <= N; n++) {
13             dp[n & 1][0][0] = true;
14         }
15         for (int n = 1; n <= N; n++) {
16             for (int k = 1; k <= N/2; k++) {
17                 for (int s = 1; s <= sum; s++) {
18                     if (s >= A[n - 1]) {
19                         dp[n & 1][k][s] = dp[n-1 & 1][k][s] || dp[n-1 & 1][k-1][s - A[n - 1]];
20                     } else {
21                         dp[n & 1][k][s] = dp[n-1 & 1][k][s];
22                     }
23                 }
24             }
25         }
26         for (int k = 1; k <= N/2; k++) {
27             if ((k * sum / N * N == k * sum) && dp[N & 1][k][k * sum / N]) return true;
28         }
29         return false;
30     }
31 int main(){
32     int t;
33     while(cin>>t){
34         while(t--){
35                 vector<int>Ve;
36                 int n;
37                 int num;
38                 cin>>n;
39                 for(int i=0;i<n;i++){
40                     cin>>num;
41                     Ve.push_back(num);
42                 }
43                 if(Average(Ve)){
44                     cout<<"yes"<<endl;
45                 }else{
46                     cout<<"no"<<endl;
47                 }
48         }
49     }
50     return 0;
51 }

 

南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 G

标签:大学   mod   ++   #define   要求   psi   targe   blank   tor   

原文地址:https://www.cnblogs.com/yinghualuowu/p/9063341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!