这是为什么呢
查看原帖
这是为什么呢
813622
Igallta楼主2024/8/20 18:03
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=20;
int n,w,a[N],ans=0x3f3f3f3f,minn=0x3f3f3f3f,cub[N];
bool cmp(int x,int y){
	return x>y;
}
void dfs(int x,int p){
	if(p>=ans)return;
	if(x==n+1){
		ans=p;
		return;
	}
	for(int i=1;i<=p;i++){
		if(cub[i]+a[x]<=w){
			cub[i]+=a[x];
			dfs(x+1,p);
			cub[i]-=a[x];
		}
	}
	dfs(x,p+1);//改动
}
signed main(){
	cin>>n>>w;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1,cmp);
	dfs(1,0);
	cout<<ans;
	return 0;
}

这样就会 T on #2。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=20;
int n,w,a[N],ans=0x3f3f3f3f,minn=0x3f3f3f3f,cub[N];
bool cmp(int x,int y){
	return x>y;
}
void dfs(int x,int p){
	if(p>=ans)return;
	if(x==n+1){
		ans=p;
		return;
	}
	for(int i=1;i<=p;i++){
		if(cub[i]+a[x]<=w){
			cub[i]+=a[x];
			dfs(x+1,p);
			cub[i]-=a[x];
		}
	}
	cub[p+1]=a[x];
	dfs(x+1,p+1);//这里改动
	cub[p+1]=0;
}
signed main(){
	cin>>n>>w;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1,cmp);
	dfs(1,0);
	cout<<ans;
	return 0;
}

这样就 AC 了。

看起来它貌似只优化了一层循环,而 nn 又那么小,为什么会给我 T。

2024/8/20 18:03
加载中...