1 1000 5 800 2 400 5 300 5 400 3 200 2
3900
AC码:
#include<stdio.h> #include<string.h> struct node { int v; int p; }num[25]; int max(int x,int y) { return x>y?x:y; } int main() { int N; int dp[30003]; scanf("%d",&N); while(N--) { int n,m,i,j; scanf("%d%d",&n,&m); memset(dp,0,sizeof(dp)); for(i=0;i<m;i++) { scanf("%d%d",&num[i].v,&num[i].p); } for(i=0;i<m;i++) { for(j=n;j>=num[i].v;j--) dp[j]=max(dp[j-num[i].v]+num[i].v*num[i].p,dp[j]); } printf("%d\n",dp[n]); } return 0; }
原文地址:http://blog.csdn.net/u012804490/article/details/25904117