0 pts求调(怀疑题目有问题)
查看原帖
0 pts求调(怀疑题目有问题)
1672970
Yishui_LightSky楼主2025/7/30 23:16

对于测试点一: 下载了一下数据 10 25 -14 -19 42 -48 0 43 -26 40 -40 39 50 -3 -8 -43 19 -44 -42 -13 -48 -22 29 43 -2 43 46 45 -48 15 0 1 10 36 33 1 39 -18 -6 -38 -28 5 -49 -29 -48 -7 -22 21 0 -13 -42 2 16 37 -6 -37 30 -11 -42 32 -46 8 -18 14 -6 -36 -35 -17 -3 10 -4 19 -36 -3 41 -34 40 -32 38 -11 6 46 42 -29 33 -15 -15 12 25 -7 -7 30 -50 26 -7 -5 41 9 28 -13 -32 -27 -45 -18 21 46 -1 11 -36 -14 -50 21 -18 42 43 -36 -23 -23 26 -49 20 -31 31 21 45 -26 -35 35 33 44 -28 -49 -33 -23 -16 38 -27 33 -2 -12 -31 -2 -41 1 -11 -49 16 17 -22 -9 18 48 11 -1 19 5 24 35 -10 7 28 12 8 45 40 42 33 -37 25 -20 2 45 29 11 -5 -32 12 -40 35 41 2 3 39 -38 -49 7 18 26 -9 -43 -18 -31 20 41 -36 10 33 47 24 8 -23 -25 2 -45 37 48 -27 -2 -43 -42 -11 10 11 -23 22 13 35 -11 -12 -24 -3 21 -5 -33 12 9 27 -5 5 0 -48 32 25 4 38 11 1 -39 -41 9 -31 -1 -32 30 26 41 -8 11 -21 31 37 27 预期:321 6 7 8 12 13 17 20 21 23 24 更优解:326 0 1 2 5 10 11 12 17 20 24 题目说可以一束花都不放,说明可以有花不放 代码:

#include<bits/stdc++.h>
using namespace std; 
int f,v;
pair<int,vector<int> > res[101][101];
vector<vector<int> >pro; 
vector<int>path;
pair<int,vector<int> > dfs(int flo,int vas,bool rec){
	vector<int> p;
	if(flo==f|vas==v)return {0,vector<int>(f,-1)};
	if(res[flo][vas].first!=-2)return res[flo][vas];
	int ans=1<<31;
	int np=0;
	for(int i=vas;i<v;i++){
		//ans=max(ans,dfs(flo+1,i+1)+pro[flo][i]);
		pair<int,vector<int> >p1=dfs(flo+1,i+1,0);
		int t=p1.first+pro[flo][i];
		if(t>ans){
			p=p1.second;
			np=i;
			ans=t;
		}
	}
	//ans=max(ans,dfs(flo+1,vas));
	pair<int,vector<int> >p1=dfs(flo+1,vas,0);
	if(p1.first>ans){
		p=p1.second;
		np=-1;
		ans=p1.first;
	}
	
	vector<int>nnp=vector<int>(p);
	nnp[flo]=np;
	if(rec)path=nnp;
	res[flo][vas]={ans,nnp};
	return {ans,nnp};
}
int main(){
	cin>>f>>v;
	for(int i=0;i<f;i++){
		for(int j=0;j<v;j++){
			res[i][j]={-2,vector<int>(0)};
		}
	}
	pro=vector<vector<int> >(f,vector<int>(v));
	path=vector<int>(f,-1);
	for(int i=0;i<f;i++){
		for(int j=0;j<v;j++){
			cin>>pro[i][j];
		}
	}
	cout<<dfs(0,0,true).first<<endl;
	for(int i=0;i<f;i++){
		cout<<path[i]+1<<" ";
	}
	return 0;
}```
2025/7/30 23:16
加载中...