本蒟蒻样例都没过 ,求DALAO救急
查看原帖
本蒟蒻样例都没过 ,求DALAO救急
1098953
M_Jun楼主2024/7/15 21:10

恳求 DA LAO 帮忙

本蒟蒻已经从19:00爆肝到十分钟前了(之后一直在调试) 但是样例都没过 头痛欲裂


源代码 :

#include <iostream>
#include <algorithm> 
using namespace std ;
#define int long long
#define INF 32005

int n , m ; 

struct Node {
	int ip  ; // 第 几 行 输 入 
	int pri ; // 价 格 
	int imp ; // 重 要 度 
	int aff ; // 附 属 于 第 几 行 的 主 件 
} comm[INF] ;

int ans ;
int dp [INF] ;


int dfs (int i ,int money ,int pro_sum) {
	if (dp [i]) return dp [i]  ;
	if (i == m or money <= comm[i].pri){
		if(pro_sum > ans) ans = pro_sum ;
		return 0 ;
	} 
	dp[i] = 1 ;
	if(comm[i].aff == 0){
		if (comm[i].pri <= money) {
			dp[i] = max (dfs(i + 1 , money - comm[i].pri , pro_sum + comm[i].pri * comm[i].imp) , dfs (i + 1 , money , pro_sum)) ;
		}
	}else {
		if (comm[i].pri + comm[comm[i].aff -1].pri <= money) {
			dp[i] = max (dfs(i + 1 , money - (comm[i].pri + comm[comm[i].aff -1].pri) , pro_sum + comm[i].pri * comm[i].imp) , dfs (i + 1 , money , pro_sum)) ;
		}
	}
	return dp [i] ;
}

bool cmp (Node x , Node y) {
	if(y.aff == x.ip - 1) return true ; 
	else if (x.aff == y.aff and x.pri == y.pri) return x.imp > y.imp ;
	else return x.pri > y.pri ;
}

signed main ( ) {
	cin >> n >> m ;
	for(int i = 0 ; i < m ; i ++) { 
		comm[i].ip = i + 1 ; 
		cin >> comm[i].pri >> comm[i].imp >> comm[i].aff ; 
	}
	
	sort (comm , comm + m , cmp) ;
	dfs (0 , n , 0) ;
	
	cout << ans << endl ;
	
	return 0 ;
}

题目链接
本蒟蒻的提交记录 ( 我也不知道咋骗到一个测试点 )

2024/7/15 21:10
加载中...