蒟蒻100分但hack数据没过,求助!
查看原帖
蒟蒻100分但hack数据没过,求助!
1303045
heye666楼主2025/1/25 14:59

这是本来我写的100分但是hack数据没过的代码:

#include <iostream>
#include <vector>
using namespace std;
struct node{
	vector<int> p;
	vector<int> v;
	int number;
};
int n,m,o;
node a[61];
int dp[61][32001];
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;++i){
		int x,y,z;
		cin>>x>>y>>z;
		if(z==0){
			o++;
			a[o].p.push_back(x);
			a[o].v.push_back(x*y);
			a[o].number=i;
		}else{
			for(int j=1;j<=o;++j){
				if(a[j].number==z){
					a[j].p.push_back(x);
					a[j].v.push_back(x*y);
					break;
				}
			}
		}
	}
	for(int i=1;i<=o;++i){
		for(int j=1;j<=n;++j){
			int f1,f2,f3,f4,f5;
			f1=f2=f3=f4=f5=0;
			f1=                                       dp[i-1][j];
			if(j-a[i].p[0]>=0) f2=                    dp[i-1][j-a[i].p[0]]+a[i].v[0];
			if(j-a[i].p[0]-a[i].p[1]>=0) f3=          dp[i-1][j-a[i].p[0]-a[i].p[1]]+a[i].v[0]+a[i].v[1];
			if(j-a[i].p[0]-a[i].p[2]>=0) f4=          dp[i-1][j-a[i].p[0]-a[i].p[2]]+a[i].v[0]+a[i].v[2];
			if(j-a[i].p[0]-a[i].p[1]-a[i].p[2]>=0) f5=dp[i-1][j-a[i].p[0]-a[i].p[1]-a[i].p[2]]+a[i].v[0]+a[i].v[1]+a[i].v[2];
			dp[i][j]=max(max(max(max(f1,f2),f3),f4),f5);
		}
	}
	int Max=1;
	for(int i=2;i<=o;++i){
		if(dp[Max][n]<dp[i][n])
			Max=i;
	}
	cout<<dp[Max][n];
}

这是我之后hack数据过了,但是只得了30分的代码(哭):

#include <iostream>
#include <vector>
using namespace std;
struct node{
	vector<int> p;
	vector<int> v;
	int number;
};
int n,m,o,k;
node a[61];
int dp[61][32001];
int save[61][3];
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;++i){
		int x,y,z;
		cin>>x>>y>>z;
		if(z==0){
			o++;
			a[o].p.push_back(x);
			a[o].v.push_back(x*y);
			a[o].number=i;
		}else{
			++k;
			save[k][0]=x;
			save[k][1]=y;
			save[k][2]=z;
		}
	}
	for(int j=1;j<=o;++j){
		for(int i=1;i<=k;++i){
			if(a[j].number==save[k][2]){
				a[j].p.push_back(save[k][0]);
				a[j].v.push_back(save[k][0]*save[k][1]);
				break;
			}
		}
	}
	for(int i=1;i<=o;++i){
		for(int j=1;j<=n;++j){
			int f1,f2,f3,f4,f5;
			f1=f2=f3=f4=f5=0;
			f1=                                       dp[i-1][j];
			if(j-a[i].p[0]>=0) f2=                    dp[i-1][j-a[i].p[0]]+a[i].v[0];
			if(j-a[i].p[0]-a[i].p[1]>=0) f3=          dp[i-1][j-a[i].p[0]-a[i].p[1]]+a[i].v[0]+a[i].v[1];
			if(j-a[i].p[0]-a[i].p[2]>=0) f4=          dp[i-1][j-a[i].p[0]-a[i].p[2]]+a[i].v[0]+a[i].v[2];
			if(j-a[i].p[0]-a[i].p[1]-a[i].p[2]>=0) f5=dp[i-1][j-a[i].p[0]-a[i].p[1]-a[i].p[2]]+a[i].v[0]+a[i].v[1]+a[i].v[2];
			dp[i][j]=max(max(max(max(f1,f2),f3),f4),f5);
		}
	}
	int Max=1;
	for(int i=2;i<=o;++i){
		if(dp[Max][n]<dp[i][n])
			Max=i;
	}
	cout<<dp[Max][n];
}

在此本蒟蒻向各位dalao求助! Orz

2025/1/25 14:59
加载中...