#include <stdio.h> #include <string.h> #define max(x,y) (x>y)?x:y int main () { int T,N,a,b; scanf("%d %d",&T,&N); int i,j; int dp[N+1][T+1]; memset(dp,0,sizeof(dp)); for(i=1;i<=N;i++) { char c; scanf("%s",&c); scanf("%d %d",&a,&b); for(j=1;j<=T;j++) { if(j>=a) dp[i][j]=max(dp[i-1][j],dp[i-1][j-a]+b); else dp[i][j]=dp[i-1][j]; } } printf("%d",dp[N][T]); return 0; }
时间: 2024-04-26 22:25:33 浏览: 112
根据代码的格式和变量名可以看出这是一段使用动态规划解决背包问题的代码。其中 T 和 N 分别是背包的容量和物品的数量。每个物品由一个重量 a 和一个价值 b 表示。
代码中使用了一个二维数组 dp 来存储背包容量和不同物品数量下的最大价值。具体地,dp[i][j] 表示在前 i 个物品中选择总重量不超过 j 的物品的最大价值。在代码中,使用了一个 for 循环来枚举不同的物品,根据背包容量 j 和物品重量 a 的大小关系来更新 dp[i][j]。最后输出 dp[N][T] 即可。
需要注意的是,代码中定义的宏 max(x,y) 并不严谨,应该改为 #define max(x,y) ((x)>(y)?(x):(y)) 才符合语法规范。
阅读全文