Buns, Longest Regular Bracket Sequence, Road Optimization
Autor(es):
dp[i] = max(dp[i], dp[i - w[j] * k] + c[j] * k);
c[j] * k <= i;
k variando de 0 até a[j] / b[j].
int main() {
int c0, d0;
cin >> n >> m >> c0 >> d0;
a = b = c = d = vi(m + 1);
a[0] = INF;
b[0] = 1;
c[0] = c0;
d[0] = d0;
for (int i = 1; i <= m; i++)
cin >> a[i] >> b[i] >> c[i] >> d[i];
cout << knapsack() << "\n";
return 0;
}
a[0] = INF;
b[0] = 1;
int knapsack() {
vi dp(n + 1);
for (int j = 0; j <= m; j++) {
for (int i = n; i >= 0; i--) {
for (int k = 0; b[j] * k <= a[j]; k++) {
if (c[j] * k <= i)
dp[i] = max(dp[i],
dp[i - c[j] * k] + d[j] * k);
}
}
}
return dp[n];
}
N -> total de massa
M -> total de donuts
A -> recheio disponível
-> Devemos contar quantas sequências desse tamanho máximo existem.
-> Se não houver nenhuma sequência correta printar “0 1”.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
string s;
cin >> s;
s = "+" + s;
ll tam = s.size();
vector<ll> dp (tam+1, 0);
stack<ll> pq;
ll ma = 0;
}
for(int i = 1; i <= tam; i++){
if(s[i] == ')'){
if(pq.empty())continue;
ll val = pq.top(); pq.pop();
ll range = i - val + 1;
dp[i] = range + dp[val-1];
ma = max(ma, dp[i]);
}
else{
pq.push(i);
}
}
ll cont = 0;
for(int i = 1; i <= tam; i++){
if(ma == dp[i])cont++;
}
if(ma == 0)cout << "0 1\n";
else cout << ma << " " << cont << "\n";
d.push_back(l);
a.push_back(0);
dp[0][0] = 0;
for (int i = 1; i <= n; i++){
for (int j = 0; j <= k; j++){
for (int m = 0; m < i; m++){
ll removed = j - (i - m - 1);
if (removed >= 0)
{
dp[i][j] = min(dp[i][j], dp[m][removed] + (d[i] - d[m]) * a[m]);
}
}
}
}