原题链接:
本题为经典的01背包问题,运用公式可求最优解,详解可看本人在题目“采药”中的解答
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int f[26][30001]={};
int main()
{
int N,m; //N为总金额,m为购买个数
cin>>N>>m;
int i,j;
int value[26]; //物品重要度
int price[26]; //物品价格
for(i=1;i<=m;i++)
{
cin>>price[i];
cin>>value[i];
}
for(i=1;i<=m;i++)
for(j=1;j<=N;j++)
{
if(j<price[i])
f[i][j]=f[i-1][j];
else
f[i][j]=max(f[i-1][j],f[i-1][j-price[i]]+price[i]*value[i]);
}
cout <<f[m][N]<<endl;
return 0;
}
本题在金额大小上与“采药”不同,此题中金额最大有30000
申请内存大小的限制
栈:在Windows下,栈是向低地址扩展数据结构,是一块连续内存区域。这句话意思是栈顶地址和栈最大容量是系统预先规定好,在WINDOWS下,栈大小是2M