http://acm.hdu.edu.cn/showproblem.php?pid=1712
赤裸裸的分组背包
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std ; int dp[101] ; int val[101][101] ; int main() { int n,m ; while(scanf("%d%d",&n,&m),(n||m)) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&val[i][j]) ; memset(dp,0,sizeof(dp)) ; for(int i=1;i<=n;i++) for(int j=m;j>=1;j--) for(int k=1;k<=j;k++)//这里注意不能超过背包上限 dp[j]=max(dp[j],dp[j-k]+val[i][k]) ; printf("%d\n",dp[m]) ; } return 0 ; }