题解 | #点菜问题#
点菜问题
https://www.nowcoder.com/practice/b44f5be34a9143aa84c478d79401e22a
#include <iostream>
#include <iterator>
using namespace std;
struct f
{
int m;//每道菜的价格
int y;//每道菜的营养
};
int main() {
int C,N;//C:钱 N:个数
while(cin>>C>>N)
{
f a[N];
for(int i=0;i<N;++i)
{
cin>>a[i].m>>a[i].y;
}
int k[N][C+1];
for(int i=0;i<N;++i)
{
for(int j=0;j<=C;++j)
{
if(j < a[i].m)
{
if(i-1>=0)
{
k[i][j] = k[i-1][j];
}
else
{
k[i][j] = 0;
}
}
else
{
if(i-1>=0)
{
if(a[i].y+k[i-1][j-a[i].m]>k[i-1][j])
{
k[i][j] = a[i].y+k[i-1][j-a[i].m];
}
else
{
k[i][j] = k[i-1][j];
}
}
else
{
k[i][j] = a[i].y;
}
}
}
}
cout<<k[N-1][C]<<endl;
}
}


查看7道真题和解析