完全背包
题目链接
这题我上来就用了01背包写,数据输入发现数据对不上,所以猜了一下输出,发现两个10可以构成20,发现原来是完全背包,每一个菜的数量是无穷的
AC代码:
#include<bits/stdc++.h>
using namespace std;
// 秋秋的幸福值
#define maxn 100005
int dp[maxn];
int n,m;
struct node
{
int a,b;
}temp[maxn];
void s_dp()
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=temp[i].b;j<=m;j++)
{
dp[j]=max(dp[j],dp[j-temp[i].b]+temp[i].a);
}
}
printf("%d\n",dp[m]);
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%d %d",&temp[i].a,&temp[i].b);
}
scanf("%d",&m);
s_dp();
}
}