MnZn求助灵异事件
查看原帖
MnZn求助灵异事件
455490
Sharpsmile楼主2022/12/1 16:47

交上去之后第一个点就WA掉了,剩下全部RE。第一个点数据(也就是样例)在本地跑和你谷IDE上跑答案都是对的,但是交上去之后看错误信息好像输出的是-1

Code

//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#include <unordered_map>
#include <random>
#define int long long
#define double long double
#define p1(x) x.first
#define p2(x) x.second
#define i128 __int128_t
//#pragma GCC optimize(2)
#define w(x) w[x]
#define lz(x) lz[x]
#define lc(x) (x<<1)
#define rc(x) (x<<1|1)
#define pii pair<int,int>
using namespace std;
int n,L;
set<int>s[30];
int len[30];
int dp[1<22];
inline int ppc(int x){
	int res=0;
	while(x)res+=x&1,x>>=1;
	return res;
}
signed main(){
	ios::sync_with_stdio(0);
	//freopen("/Users/liuyile/Downloads/P5123_2.in","r",stdin);
	//freopen("","w",stdout);
	cin>>n>>L;
	for(int i=0;i<n;i++){
		cin>>len[i];
		int c=0;
		cin>>c;
		for(int j=1;j<=c;j++){
			int x;
			cin>>x;
			s[i].insert(x);
		}
	}
	int N=1<<n;
	//return 0;
int res=n+1;
	for(int i=1;i<N;i++){
		for(int j=0;j<n;j++)
			if((1<<j)&i){
				int tmp=(1<<j)^i;
				auto it=s[j].upper_bound(dp[tmp]);
				if(it==s[j].begin())continue;
				it--;
				dp[i]=max(dp[i],max(dp[tmp],*it+len[j]));
			}
		if(dp[i]>=L)res=min(res,ppc(i));
		//cout<<i<<" "<<dp[i]<<" "<<ppc(i)<<endl;
	}
	if(res==n+1)cout<<-1<<endl;
	else cout<<res<<endl;
	return 0;
}

2022/12/1 16:47
加载中...