我正在嘗試爲該問題編寫一個DP解決方案:count其元素總和可被k整除的數組的子序列總數。計算其總和可被k整除的子序列總數
我寫了下面的解決方案。但它沒有給出正確的結果。就像在下面的代碼片段中一樣,數組是{1,2,1},k = 3。因此,可以被3整除的子序列的總數是2,但實際結果是3,這顯然是不正確的。
請指出我的錯誤。
private int countDP(int[] a, int k)
{
int L = a.length;
int[][] DP = new int[L][k];
for(int i = 0; i < DP.length; i++)
{
for(int j = 0; j < DP[0].length; j++)
DP[i][j] = -1;
}
int res = _countDP(a, k, DP, 0, 0);
return res;
}
private int _countDP(int[] a, int k, int[][] DP, int idx, int m) //Not giving the correct result.
{
if(idx == a.length)
return m == 0 ? 1 : 0;
if(DP[idx][m] != -1)
return DP[idx][m];
int ans = 0;
ans = _countDP(a, k, DP, idx + 1, m);
ans += _countDP(a, k, DP, idx + 1, (m + a[idx]) % k);
return DP[idx][m] = ans;
}
public static void main(String[] args)
{
CountSubnsequences cs = new CountSubnsequences();
int[] a = {1, 2, 1};
int k = 3;
int total1 = cs.countDP(a, k);
System.out.println("Total numeber of sub sequences: " + total1);
}
兩個基本點:1.當你寫一個程序,它不工作,我建議你補充一點,說明它在做什麼的打印輸出:該功能已輸入的狀態條件等等。你的問題是「請調試我的代碼」。 2.如果您以特定的語言在SO中發佈代碼,則可以考慮將其添加到問題的標記中。 –