描述:
相信你已经AC了A + B Problem,是不是很简单呢。
下面继续A and B Problem这个简单的问题,将若干个长度不同的木棍,分成A堆和B堆,并且保证A堆所有木棍的长度之和等于B堆所有木棍的长度之和
输入:
输入数据有多组。
每组测试数据第一行为一个正整数n(n<=100),代表总的木棍个数;
第二行为n个以空格隔开的正整数ci(ci<=100)。
输出:
如果n根木棍可以分成两堆木棍(A堆和B堆),并且A堆所有木棍的长度之和等于B堆所有木棍的长度之和,则输出"Yes" ,否则输出"No"(A堆和B堆中的木棍个数不必相等)。
样例:
4 1 2 3 4 2 1 2
Yes No
简单背包dp模板了
#include<iostream> #include<algorithm> using namespace std; int main() { int n; while(cin>>n) { int qy[105],sum=0; for(int i=0;i<n;i++) cin>>qy[i],sum+=qy[i]; if(sum%2==1) { cout<<"No"<<endl; continue; } int kk[10005]={0},f=0; for(int i=0;i<n;i++) for(int j=sum/2;j>=qy[i];j--) kk[j]=max(kk[j-qy[i]]+qy[i],kk[j]); for(int i=0;i<=sum/2;i++) if(kk[i]==sum/2) { f=1; break; } if(f) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }