HDU1712http://acm.hdu.edu.cn/showproblem.php?pid=1712
简单的分组背包
1 #include <map> 2 #include <set> 3 #include <stack> 4 #include <queue> 5 #include <cmath> 6 #include <ctime> 7 #include <vector> 8 #include <cstdio> 9 #include <cctype> 10 #include <cstring> 11 #include <cstdlib> 12 #include <iostream> 13 #include <algorithm> 14 using namespace std; 15 #define INF 0x3f3f3f3f 16 #define MAX(a,b) (a > b ? a : b) 17 #define MIN(a,b) (a < b ? a : b) 18 #define mem(a) memset(a,0,sizeof(a)) 19 20 typedef long long LL; 21 const double eps = 1e-12; 22 const int MAXN = 1005; 23 const int MAXM = 5005; 24 25 int f[105],w[105][105]; 26 int n,m; 27 int max(int a,int b) 28 { 29 return a>b?a:b; 30 } 31 void Zero_One_pack(int k)// 32 { 33 for(int i=m;i>=1;i--) 34 for(int j=1;j<=m&&i>=j;j++) 35 f[i]=max(f[i],f[i-j]+w[k][j-1]); 36 } 37 int group_pack() 38 { 39 mem(f); 40 for(int i=0;i<n;i++) 41 Zero_One_pack(i) ; 42 return f[m]; 43 } 44 int main() 45 { 46 while(~scanf("%d%d",&n,&m)) 47 { 48 if(!m&&!n)break; 49 for(int i=0;i<n;i++) 50 for(int j=0;j<m;j++) 51 scanf("%d",&w[i][j]); 52 printf("%d ",group_pack()); 53 } 54 return 0; 55 }