谁能解释以下问题
#include<bits/stdc++.h>
using namespace std;
int a[20][20];
int n,m;
int dp[20];
int path[20][20];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[n+1-i][j]);//倒序 保证字典序最小
//分组背包
for(int i=1;i<=n;i++)
{
for(int j=m;j>=0;j--)
{
for(int k=0;k<=m;k++)
{
if(j>=k)
{
if(dp[j-k]+a[i][k]>dp[j])
{
dp[j]=dp[j-k]+a[i][k];
for(int x=1;x<i;x++) path[j][x]=path[j-k][x];
path[j][i]=k;//记录来时的方案
}
}
}
}
}
printf("%d\n",dp[m]);
for(int i=n;i>=1;i--) printf("%d %d\n",n-i+1,path[m][i]);//从1到n
}
以上是AC代码 但是没过自己的hack
3 3
0 0 100
0 0 100
0 0 0
22行条件加上等号能过自己的数据但是原题pts90
这是本蒟蒻的问题还是什么?()
玄关