C++で等しい合計のk個のパーティションでリストをパーティション化できるかどうかをチェックするプログラム
numsと呼ばれる数値のリストと別の値kがあるとすると、各サブセットの合計が同じであるk個の異なるサブセットにnumsを分割できるかどうかを確認する必要があります。
したがって、入力がnums =[4、2、6、5、1、6、3] k =3のようである場合、出力はTrueになります。これは、[6、3]、[6]のように分割できるためです。 、2、1]、および[4、5]。
これを解決するには、次の手順に従います-
- 関数check()を定義します。これには、配列vが必要です。
- iを初期化する場合:=1、i
- v[i]がv[0]と等しくない場合、-
- falseを返す
- v[i]がv[0]と等しくない場合、-
- return check(temp)
- trueを返す
例(C ++)
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool check(vector<int>& v) {
for (int i = 1; i < v.size(); i++) {
if (v[i] != v[0])
return false;
}
return true;
}
bool dfs(int idx, vector<int>& nums, vector<int>& temp) {
if (idx == nums.size()) {
return check(temp);
}
bool ret = false;
for (int i = 0; i < temp.size(); i++) {
temp[i] += nums[idx];
ret = dfs(idx + 1, nums, temp);
if (ret)
return true;
temp[i] -= nums[idx];
}
return false;
}
bool solve(vector<int>& nums, int k) {
vector<int> temp(k);
return dfs(0, nums, temp);
}
};
bool solve(vector<int>& nums, int k) {
return (new Solution())->solve(nums, k);
}
int main(){
vector<int> v = {4, 2, 6, 5, 1, 6, 3};
int k = 3;
cout << solve(v, 3);
} 入力
{4, 2, 6, 5, 1, 6, 3}, 3 出力
1
-
Pythonで2つのパーティションのグループを同じ合計で作成できるかどうかを確認するプログラムはありますか?
numsと呼ばれる数値のリストがあるとすると、両方のグループの要素の合計が同じである2つのグループにnumsを分割できるかどうかを確認する必要があります。 したがって、入力がnums =[2、3、6、5]のような場合、[2、6]や[3、5]のようなグループを作成できるため、出力はTrueになります。 これを解決するために、次の手順に従います total:=numsのすべての要素の合計 合計が奇数の場合、 Falseを返す 半整数:=合計の整数部分/ 2 dp:=サイズの半分+1のリストとfalseで埋める dp [0]:=true nums
-
Pythonでリストが厳密に増加しているか減少しているかを確認するプログラム
番号のリストがあるとします。リストが厳密に増加しているか、厳密に減少しているかを確認する必要があります。 したがって、入力がnums =[10、12、23、34、55]のような場合、すべての要素が異なり、各要素が前の要素よりも大きいため、出力はTrueになります。したがって、これは厳密に増加しています。 これを解決するには、次の手順に従います- numsのサイズが<=2の場合、 Trueを返す numのすべての要素が明確でない場合は、 Falseを返す ordered:=リスト番号を並べ替える numsが順序付けされたものと同じである場合、またはnumsが逆の方法で順序付け