哪位大佬帮我调试一下?
  • 板块P10484 送礼物
  • 楼主xcms
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/5 20:42
  • 上次更新2024/10/5 21:47:13
查看原帖
哪位大佬帮我调试一下?
1245940
xcms楼主2024/10/5 20:42

卷题备战CSP-J,调了一晚上为调出来,WA最后一个测试点。

#include <bits/stdc++.h>
#define int long long
using namespace std;
int s(int a,int p){
	int sum=1;
	while(p--)sum*=a;
	return sum;
}
const int N=pow(2,24)+1,inf=1e18;
int w,n,a[55],b[N],c[N],p1,p2,ansx=-inf;
void dfs1(int p,int cnt){
	if(p>n/2){
		b[++p1]=cnt;
		return ;
	}
	dfs1(p+1,cnt);
	dfs1(p+1,cnt+a[p]);
}
void dfs2(int p,int cnt){
	if(p>n){
		c[++p2]=cnt;
		return ;
	}
	dfs2(p+1,cnt);
	dfs2(p+1,cnt+a[p]);
}
signed main(){
//	freopen("xxx.in","r",stdin);
//	freopen("xxx.out","w",stdout);
	cin>>w>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+1+n);
	dfs1(1,0);
	dfs2(n/2+1,0);
	sort(b+1,b+1+p1);
	sort(c+1,c+1+p2);
	for(int i=1;i<=p1;i++){
		int l=1,r=p2,temp=0;
		while(l<=r){
			int mid=(l+r)>>1;
			if(b[i]+c[mid]<=w){
				l=mid+1;
				temp=mid;
			}else r=mid-1;
		}
		ansx=max(ansx,b[i]+c[temp]);
	} 
	cout<<ansx<<"\n";
	return 0;
}
2024/10/5 20:42
加载中...