16pts,TLE+AC+WA请求大佬!!(DFS)
查看原帖
16pts,TLE+AC+WA请求大佬!!(DFS)
1068194
H_M_B_C_楼主2024/7/11 22:04
#include <bits/stdc++.h>
using namespace std;
int n,m,a[20];
bool vis[20];
int minn=999999,sum[10000];

bool cmp(int t,int b) {
	return t > b;
}

void dfs(int dep,int c) {
	if (c >= minn) return;
	if (dep > n) {
		minn=c;
		return;
	}
    for (int i=1;i<=n;i++) {
    	if (vis[i]==0 && sum[c]-a[i] >= 0) {
    		sum[c]-=a[i];
    		vis[i]=1;
    		dfs(dep+1,c);
    		vis[i]=0;
    		sum[c]+=a[i];
		}else if (vis[i]==0 && sum[c]-a[i] < 0) {
			c++;
			sum[c]-=a[i];
			vis[i]=1;
			dfs(dep+1,c);
			vis[i]=0;
			sum[c]+=a[i];
			c--;
		}
	}
}

int main() {
	scanf("%d%d",&n,&m);
	for (int i=1;i<=10000;i++) sum[i]=m;
	for (int i=1;i<=n;i++) {
		scanf("%d",&a[i]);
	}
	sort(a+1,a+1+n,cmp); 
	dfs(1,1);
	printf("%d",minn);
	return 0;
}
2024/7/11 22:04
加载中...