解题思路: 经典 01背包问题
注意事项:
参考代码:
#include <stdio.h> #include <string.h> #define M 30010 #define Max(a,b) a>b?a:b int main() { int N,m,i,j,p,v;long int dp[M]; memset(dp,0,sizeof(dp)); scanf("%d%d",&N,&m); for(i=1;i<=m;i++) {scanf("%d%d",&v,&p); for(j=N;j>=v;j--)//枚举金钱 倒着 方式 降维 dp[j]=Max(dp[j],dp[j-v]+v*p);//取与不取 } printf("%ld\n",dp[N]); return 0; }
0.0分
13 人评分