| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
代码如下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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator