求助!
  • 板块灌水区
  • 楼主wyl123ly
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/22 20:15
  • 上次更新2023/11/2 18:42:38
查看原帖
求助!
1041871
wyl123ly楼主2023/9/22 20:15

p4799链接

  • 代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 105;
ll d[MAXN];
ll n,m;
vector<ll> k1,k2;
void dfs(ll l,ll r,ll sum,vector<ll> &k){
	if(sum > m){
		return;
	}
	if(l > r){
		k.push_back(sum);
		return;
	}
	dfs(l + 1,r,sum + d[l],k);
	dfs(l + 1,r,sum, k);
}
ll tot = 0;
int main(){
	
	scanf("%lld%lld", &n, &m);
	ll mid = n / 2;
	for(int i = 1;i <= n;i++){
		scanf("%lld", &d[i]);		
	}
	dfs(1,mid,0,k1);
	dfs(mid + 1,n,0,k2);
	sort(k1.begin(), k1.end());
	sort(k2.begin(),k2.end());
	for(int i = 0;i < k1.size();i++){
		ll num_k1 = k1[i];
		int t = 1 + lower_bound(k2.begin(), k2.end(), m - num_k1) - k2.begin();
		tot += t;
	}
	printf("%lld", tot);
	return 0;
}

为什么在这里:

for(int i = 0;i < k1.size();i++){
		ll num_k1 = k1[i];
		int t = 1 + lower_bound(k2.begin(), k2.end(), m - num_k1) - k2.begin();
		tot += t;
	}

要严格大于号才可以???

2023/9/22 20:15
加载中...