社区讨论

有个问题+进食后人

P5322[BJOI2019] 排兵布阵参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mhj3h281
此快照首次捕获于
2025/11/03 20:06
4 个月前
此快照最后确认于
2025/11/03 20:06
4 个月前
查看原帖

疑惑

为什么第一份能过第二份不能过 第一份:
CPP
#include<bits/stdc++.h>

#define int long long

using namespace std;
int p[101][101];
int f[20005];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int s,n,m;
	cin>>s>>n>>m;
	for(int i=1;i<=s;i++){ 
		for(int j=1;j<=n;j++){
			int a;
			cin>>a;
			p[j][i]=a*2+1;
		}
	}
	for(int i=1;i<=n;i++){
		sort(p[i]+1,p[i]+1+s);
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--){
			for(int k=1;k<=s;k++){
				if(p[i][k]<=j){
					f[j]=max(f[j],f[j-p[i][k]]+i*k);
				}
			}
		}
	}
	cout<<f[m]<<"\n";
	return 0;
}

第二份:
CPP
#include<bits/stdc++.h>

#define int long long

using namespace std;
int p[101][101];
int f[20005];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int s,n,m;
	cin>>s>>n>>m;
	for(int i=1;i<=s;i++){ 
		for(int j=1;j<=n;j++){
			int a;
			cin>>a;
			p[j][i]=a*2;
		}
	}
	for(int i=1;i<=n;i++){
		sort(p[i]+1,p[i]+1+s);
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--){
			for(int k=1;k<=s;k++){
				if(p[i][k]<j){
					f[j]=max(f[j],f[j-p[i][k]]+i*k);
				}
			}
		}
	}
	cout<<f[m]<<"\n";
	return 0;
}

进食后人

不要用 >> 要用 >=>=
原因在线等大佬解释

回复

4 条回复,欢迎继续交流。

正在加载回复...