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; }