私の問題は次のとおりです:N個の整数とKの配列を与えました。 1からKまで、与えられた配列からの要素しか使用できないようにします。要素を複数回使用することはできません。1からKまでの全ての数字が配列からの数字を使ってのみ形成できるかどうかを調べる
ここでは、配列= {1,2,3,4}とK = 10の例を示しています。答えは、すべて1 = 1,2 = 2,3 = 4 + 3 + 1,10 = 4 + 3 + 2 + 1、8 = 4 + 3 + 1,9 = 4 + 3 + 1,10 = 1。
ここで別の例があります:array = {1,3,4} and K = 3、整数2を作ることができないので、答えはFALSEです。
私はインターネット上で1つのコードを見つけましたが、私はそれを考えていましたが、どのように動作するのか、それはいつも正しいのですか?ここで
は私のコードです:https://code.google.com/codejam/contest/4244486/dashboard#s=p2&a=2
分析:
int n, k; cin>>n>>k;
int arr[n];
for(int i=0;i<n;i++) {
cin>>arr[i];
}
sort(arr,arr+n);
int sum=0;
for(int i=0;i<n;i++) {
if(arr[i]>sum+1) return false;
sum+=arr[i];
if(sum>=k) return true;
}
return true;
要素を複数回使用することはできません。 –
はい、私はそれを追加するのを忘れました。 – someone12321
そして追加だけを使うことができますか? –