Вопрос: https://codeforces.com/problemset/problem/106/C
Лаврентий, пекарь, собирается сделать несколько булочек с начинками и продать их.
Лаврентий имеет n граммов теста, а такжеразные виды начинки.Типы начинки нумеруются от 1 до m.Лаврентий знает, что от i-й начинки осталось всего несколько граммов.Для приготовления булочки с i-й начинкой требуется ровно двести граммов начинки i и ci грамма теста.Такую булочку можно продать за ди тугрикс.
Также он может делать булочки без начинки.Каждой из таких булочек требуется около 30 граммов теста, и ее можно продать за d0 тугриков.Таким образом, Лаврентий может приготовить любое количество булочек с разными начинками или без них, если у него нет теста и начинки.Лаврентий выбрасывает весь лишний материал, оставшийся после выпекания.
Найдите максимальное количество тугриков, которое Лаврентий может заработать.
Вот мой алгоритм, который написан без объяснений.Я думаю, что это правильно, и код поврежден.
/*
dp[amt-of-dough-used_i][stuffing-used_j][stuffing_times-used_k] = max profit when i grams of dough is used for making stuffing j for a total of k times.
dp[i][j][k]=dp[i-k*c[i]][j][0] for all k=0,1,...,b[i]/c[i].
best[amt-of-dough-used_i] = max(dp[i][j][k] for all j,k).
Answer :
max(best[i] + d*[(n-i)/c] for all i)
*/
Вот мой код: https://ideone.com/70FMql
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,c_0,d_0;
cin>>n>>m>>c_0>>d_0;
int dp[n+1][m+1][101];
int a[m+1], b[m+1], c[m+1], d[m+1];
for (int i=1; i<=m; m++)
cin>>a[i]>>b[i]>>c[i]>>d[i];
for (int i=0; i<=n; i++)
for (int j=1; j<=m; j++)
for (int k=0; k<=a[j]/b[j]; k++)
{
dp[i][j][0]=d[j];
if (k!=0) dp[i][j][k]=0;
}
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
for (int k=0; k<=a[j]/b[j]; k++)
if (i>=k*c[i])
dp[i][j][k]=dp[i-k*c[i]][j][0];
int best[n+1];
for (int i=0; i<=n; i++) best[i]=0;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
for (int k=0; k<=a[j]/b[j]; k++)
best[i]=max(best[i],dp[i][j][k]);
int ans=0;
for (int i=0; i<=n; i++)
ans = max(ans, best[i] + d_0*(n-i)/c_0);
cout<<ans<<endl;
}
** 2 Примеры тестовых случаев были предоставлены в упомянутой ссылке Ideone,