申请添加 hack
查看原帖
申请添加 hack
554145
Night_sea_64楼主2024/7/28 19:11

这是我的错误的 AC 代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,a[110][210];
int f[110][210],cnt[110][210];
int maxn,maxid;
void output(int i,int k)
{
	if(i>1)output(i-1,k-cnt[i][k]);
	cout<<i<<" "<<cnt[i][k]<<endl;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	for(int i=1;i<=n;i++)
		for(int j=0;j<=m;j++)
			for(int k=0;k<=j;k++)
				if(f[i-1][j-k]+a[i][k]>=f[i][j])
					f[i][j]=f[i-1][j-k]+a[i][k],cnt[i][j]=k;
	cout<<f[n][m]<<endl;
	output(n,m);
	return 0;
}

可以看到里面 f[i-1][j-k]+a[i][k]>=f[i][j] 这句话每次都让当前这个公司拿尽量多的机器,这显然是错的。比如这篇题解中的数据就能 hack。而且应该也能 hack 一些其他的问题。

也就是

3 6
10 10 1 1 1 1
10 1 10 1 1 1
10 10 10 1 1 1

它的答案应该是

30
1 1
2 1
3 1
2024/7/28 19:11
加载中...