01背包模板 开心的小明

注意转头方程

#include <stdio.h>
#include <string.h>

int max(int a,int b)
{
	return a>b?a:b;
}

int main()
{
	int t;

	int n,m;

	int i,j;

	int w[30],c[30];

	int dp[30001];

	scanf("%d",&t);

	while(t--)
	{
		scanf("%d%d",&n,&m);

		for(i=1;i<=m;i++)
			scanf("%d%d",&w[i],&c[i]);

		memset(dp,0,sizeof(dp));

		for(i=1;i<=m;i++)
			for(j=n;j>=w[i];j--)
				dp[j]=max(dp[j],dp[j-w[i]]+w[i]*c[i]);

		printf("%d\n",dp[n]);
	}

	return 0;
}

  

原文地址:https://www.cnblogs.com/jackes/p/2443575.html