Can someone pls tell me , why i'm getting 40 instead of 42 in given tc int n; int m; int d;
int cord[501]; int cost[501]; int dp[501][501][501]; int findans(int i, int prev, int m) {
if (i <= 0) return 0; if (m <= 0) return INT_MAX; if (dp[i][prev][m] != -1) return dp[i][prev][m]; int ans = INT_MAX; for (int j = i; j >= 1; j--) { if (j == 1) { ans = min(findans(j - 1, j, m) + (cord[prev] - cord[j]) * (cost[j]), ans); } else { if (m > 0) { int res = min(findans(j - 1, prev, m - 1), findans(j - 1, j, m) + (cord[prev] - cord[j]) * (cost[j])); ans = min(ans, res); } else ans = min(ans, findans(j - 1, j, m) + (cord[prev] - cord[j]) * (cost[j])); } } return dp[i][prev][m] = ans;
} void solve() { cin >> n >> d >> m; for (int i = 1; i <= n; i++) { cin >> cord[i]; } for (int i = 1; i <= n; i++) { cin >> cost[i]; } cord[n + 1] = d; memset(dp, -1, sizeof(dp));
int ans = findans(n, n + 1, m); cout << ans << endl;
}