60WA+RE,貌似是数组开小了
查看原帖
60WA+RE,貌似是数组开小了
804607
rainygame楼主2023/4/5 09:47

但是开大了原本A掉的点就会TLE。

代码如下:

#include <bits/stdc++.h>
using namespace std;
#define MAXN 101

int v, n, k;
int a[MAXN], use[MAXN];
bitset<10002> f;

void dfs(int now){
	for (int i=use[now-1]+1; i<=n-k+now; i++){
    	use[now] = i;
    	if (now == k){
    		f.reset();
    		f[0] = true;
    		for (int i=1; i<=k; i++){
    			for (int j=1; j<=v/a[use[i]]; j++) f[j*a[use[i]]] = true;
			}
			
			for (int i=1; i<=k; i++){
				for (int j=a[use[i]]; j<=v; j++) f[j] = f[j] || f[j-a[use[i]]];
			}
			
			if (f[v]){
				cout << k << ' ';
				for (int i=1; i<=k; i++) cout << a[use[i]] << ' ';
				exit(0);
			}
		}else{
      		dfs(now+1);
		}
   }
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> v >> n;
	for (int i=1; i<=n; i++) cin >> a[i];
	sort(a+1, a+n+1);
	for (k=1; k<=n; k++) dfs(1);
	
	return 0;
}

2023/4/5 09:47
加载中...