有 n 个数,最多选 3 个,总和正好凑到 w 及以下的有几个。
Translated by @_YXJS_.
おもり 1, おもり 2, …, おもり N の N 個のおもりがあります。おもり i の重さは Ai です。
以下の条件を満たす正整数 n を 良い整数 と呼びます。
W 以下の正整数のうち、良い整数は何個ありますか?
入力は以下の形式で標準入力から与えられる。
N W A1 A2 … AN
答えを出力せよ。
2 10
1 3
3
2 1
2 3
0
4 12
3 3 3 3
3
7 251
202 20 5 1 4 2 100
48
おもり 1 のみを選ぶと重さの和は 1 になります。よって 1 は良い整数です。 おもり 2 のみを選ぶと重さの和は 3 になります。よって 3 は良い整数です。 おもり 1 とおもり 2 を選ぶと重さの和は 4 になります。よって 4 は良い整数です。 これら以外に良い整数は存在しません。また、1,3,4 のいずれも W 以下の整数です。よって答えは 3 個になります。
W 以下の良い整数は存在しません。
良い整数は 3,6,9 の 3 個です。 たとえばおもり 1, おもり 2, おもり 3 を選ぶと重さの和は 9 になるので、9 は良い整数です。 12 は良い整数 **ではない** ことに注意してください。
#include<bits/stdc++.h>
using namespace std;
unsigned long long n,a[1000000],w,cnt;
int main(){
cin>>n>>w;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++){
if(a[i]<=w) cnt++;
}
for(int i=0;i<n-1;i++){
if(a[i]+a[i+1]<=w) cnt++;
}
for(int i=0;i<n-2;i++){
if(a[i]+a[i+1]+a[i+2]<=w) cnt++;
}
cout<<cnt;
}
这么写为什么不对啊