这道题可以说是dp入门题
当年还是小学6年级的时候打了好久暴力,后来才发现简单得很。
用一个滚动数组维护可以省一维空间。
dp[i]=dp[k]+value{cost<=k<=w}
value表示价值,cost表示花费,w表示背包容量。
#include#include #include #include #include const int MAXM=207;using namespace std;int dp[MAXM],n,m;int main(){ memset(dp,0,sizeof(dp)); scanf("%d%d",&m,&n); int x,y; for (int i=0;i =x;j--) { dp[j]=max(dp[j],dp[j-x]+y); } } printf("%d",dp[m]);}