symons

___________每一天都是幸福的!!

  博客园  ::  :: 新随笔  ::  :: 订阅 订阅  :: 管理

use fmax().-------TLE

#define mmax(a,b) (a)>(b)?(a):(b);   ---796ms 

that's it!

#include <stdio.h>
#include <string.h>
#include <math.h>
#define  mmax(a,b) (a)>(b)?(a):(b);
int main(){
    int dp[50*50*100+100];
    int n,t,i,j,res;
    int w[250000+10];
    int t1,t2;
    int cnt,sum;
    while(~scanf("%d",&n)){
        if(n<=0) break;
        sum=0;
        cnt=0;
        memset(dp,0,sizeof(dp));
        for(i=1;i<=n;++i){
            scanf("%d%d",&t1,&t2);
            sum+=t1*t2;
            for(j=1;j<=t2;++j){
                w[++cnt]=t1;
            }
        }
        int haha;
        haha=sum/2;
        for(i=1;i<=cnt;++i)
            for(j=haha;j>=w[i];--j)
                    dp[j]=mmax(dp[j],dp[j-w[i]]+w[i]);
        t1=0;
        t1=dp[haha];
        t2=sum-t1;
        
        if(t1<t2){
            t=t1;t1=t2;t2=t;
        }
        printf("%d %d\n",t1,t2);
    }
    return 0;
}
            

 

posted on 2013-11-19 13:06  symons  阅读(239)  评论(0编辑  收藏  举报