HDU1171 DP
這題老師上課說用母函數做 想了一會 還是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;
}
最後更新:2017-04-04 07:03:18