Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

代码如下

Posted by skytough at 2007-03-08 17:04:09
In Reply To:3172为什么会RE?HELP! Posted by:skytough at 2007-03-08 17:03:06
#include<stdio.h>
#include<stdlib.h>

#define MIN(a,b) a<b?a:b
#define MAX(a,b) a>b?a:b

int main()
{
 int N,C;
 int* w;
 int **m;
 int i=0;
 
 scanf("%d%d",&N,&C);
 w = (int*)malloc((N+1)*sizeof(int));
 memset(w,0x00,sizeof(w));
 //malloc double array 
 m = (int**)malloc((N+1)*sizeof(int*));
 for(i=0;i<=N;++i)
 {
    if(i>0) 
     scanf("%d",&w[i]);
	 m[i] = (int*)malloc((C+1)*sizeof(int));
 
 }
 memset(m,0x00,sizeof(m));
 
 DP_backpack(w,C,N,m);
 
 printf("%d\n",m[1][C]); 
 free(w);
 free(m);
 return 0;
}

int  DP_backpack(int* w,int c,int n,int**m)
{
 
 int i,j=0,jMax=MIN(w[n]-1,c);
 for(j=0;j<=jMax;j++)
   m[n][j]=0;  
 for(j=w[n];j<=c;j++)
   m[n][j]=w[n];
 
 //get m[N-1,1][j] value recursively
 for(i=n-1;i>=1;i--)
 {
	jMax=MIN(w[i]-1,c);
  for(j=0;j<=jMax;j++)
     m[i][j]=m[i+1][j];
  for(j=w[i];j<=c;j++)
  	m[i][j] = MAX(m[i+1][j],m[i+1][j-w[i]]+w[i]);

 } 
 return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator