杭电2159-二维费用的背包问题

#include 
#include 
#include 
using namespace std;
int n,m,k,s;
int v[110],w[110];
int dp[110][110];
void TwoVictoryPack()
{
	int i,j,x;
	for(i=1;i<=k;i++)		//枚举怪物数 
	{
		for(j=1;j<=s;j++)	//枚举杀怪数 
		{
			for(x=w[i];x<=m;x++)	//枚举忍耐数 
			dp[x][j]=max(dp[x][j],dp[x-w[i]][j-1]+v[i]);
		}
	}
}
int main()
{
	int i;
	while(~scanf("%d%d%d%d",&n,&m,&k,&s))
	{
		for(i=1;i<=k;i++)
		scanf("%d%d",&v[i],&w[i]);
		memset(dp,0,sizeof(dp));
		TwoVictoryPack();
		if(dp[m][s]>=n)
		{
			for(i=0;i<=m;i++)
			{
				if(dp[i][s]>=n)
				{
					cout<

你可能感兴趣的:(背包问题)