玄学
查看原帖
玄学
540177
wyf_sinon楼主2024/6/22 14:54

谁能解释以下问题

#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

这是本蒟蒻的问题还是什么?()

玄关

2024/6/22 14:54
加载中...