[悬2关]01背包板子求助
查看原帖
[悬2关]01背包板子求助
765461
zhangmingsheng3521楼主2023/10/5 11:17

rt.思路同第二篇题解,样例全过了WA on #6

代码如下:

#include"bits/stdc++.h"
using namespace std;
int dp[105][100005];
int price[105],reward[105];
int kinds,money,tot=0;
int main()
{
	scanf("%d%d",&kinds,&money);
	for (int i=1;i<=kinds;i++)
	{
		scanf("%d%d",&price[i],&reward[i]);
		tot+=reward[i];
	}
	dp[0][0]=0;
	for (int i=1;i<=tot;i++)
	{
		dp[0][i]=1919810;
	}
	for (int i=1;i<=kinds;i++)
	{
		for (int j=0;j<=tot;j++)
		{
			if (j>=reward[i])
			{
				dp[i][j]=min(dp[i-1][j],(dp[i-1][(j-reward[i])]+price[i]));
			}
			if (j<reward[i])
			{
				dp[i][j]=dp[i-1][j];
            }
		}
	}
	for (int i=tot;i>=0;i--)
	{
		if (dp[kinds][i]<=money)
		{
			printf("%d",i);
			return 0;
		}
	}
}
2023/10/5 11:17
加载中...