没输出,求调
  • 板块学术版
  • 楼主Leave_Childhood
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/19 16:52
  • 上次更新2024/7/19 17:45:27
查看原帖
没输出,求调
1035525
Leave_Childhood楼主2024/7/19 16:52

小猫爬树

#include<bits/stdc++.h>
using namespace std;
int n,a[20],w,ans,d[20];
struct wq {
	int x, y, k;//x为位置,y为重量,k为存了几个
	int s[20];
	wq(int aa,int bb,int a[20],int cc) {
		x=aa,y=bb,s[20]=a[20],k=cc;
	}
};
queue<wq>q;
void bfs(int c,int z,int k) {
	int g=INT_MAX,tt;
	q.push(wq(c,z,d,k));
	while(!q.empty()) {
		wq b=q.front();
		q.pop();
		if(b.y==0) {
			for(int i=1; i<=b.k; i++) {
				a[b.s[i]]=0;
			}
			return;
		}
		if(b.x+1>n) {
			if(b.y<g) {
				g=b.y;
				tt=b.k;
				for(int i=1; i<=b.k; i++) {
					d[i]=b.s[i];
				}
			}
		}
		b.s[b.k++]=b.x;
		if(b.y-a[b.x+1]>=0&&a[b.x+1]!=0)q.push(wq(b.x+1,b.y-a[b.x+1],b.s,b.k++));
		b.s[b.k]=0;
		q.push(wq(b.x+1,b.y,b.s,b.k));
	}
	for(int i=1; i<=tt; i++) {
		a[d[i]]=0;
	}
}
int main() {
	cin>>n>>w;
	for(int i=1; i<=n; i++)cin>>a[i];
	for(int i=1; i<=n; i++) {
		if(a[i]!=0) {
			bfs(i,w,1);
			ans++;
		}
	}
	cout<<ans;
}
2024/7/19 16:52
加载中...