这题老师上课说用母函数做 想了一会 还是DP吧 开了个DP标记数组 求完各个组合的值就行了
力求代码简洁= = 向学长学习
#include <iostream> #include<cstdio> #include<cstring> using namespace std; bool dp[3000000]; int main() { int value,n,num,sum,a; while(~scanf("%d",&n)&&(n>=0)) { memset(dp,0,sizeof(dp)); dp[0]=1; sum=0; for(int i=0; i<n; i++) { scanf("%d%d",&value,&num); sum+=value*num; dp[value]=1; for(int j=1; j<num; j++) for(int k=0; k<=sum; k++) if(dp[k]) dp[k+value]=1; } for(a=sum/2; a>=0; a--) if(dp[a]) break; printf("%d %d\n",sum-a,a); } return 0; }