http://www.rqnoj.cn/Problem_2.html
总结:
1、vc6.0 span c1错误 因为之前卸载过vc6.0 导致用了绿色版本后报这个错误
2、unknown character 0xa1 错误 因为误敲入了一个全角符号,对最近改动过的代码逐行注释,然后重写该行
3、算法-动态规划
n个物品 最大情况分为两种,买第n个物品和不买第n个物品
max[n][money] = max{max[n-1][money-value[n].value], max[n-1][money]}
其中,money为总钱数,n为物品数,value[n].value 为第n个物品的价格
刚开始实现的时候,只在脑子里想了大概算法,没有用数学对其建模表述,就在实现代码上一直想成了max[n][n],即物品的二维记录表格,怎么也无法解释,后面逐个递归,又递推,发现跟金钱有关,建立max[n][money]表格就可以表述了,而这个不也正式算法的描述啊
4、路漫漫其修远兮,吾将上下而求索
实现代码如下:
#include <iostream.h>
int value[26][30001];
int totalMoney , totalArticle;
struct Article{
int value;
int depth;
}article[26];
int main()
{
int i,j;
int totalMax=0;
cin>>totalMoney>>totalArticle;
for (i=1; i<=totalArticle; i++) cin>>article[i].value>>article[i].depth;
for (j=1; j<=totalArticle; j++)
{
for (i=0;i<=totalMoney;i++)
{
value[j][i] = value[j-1][i];
int sumValue = article[j].value*article[j].depth;
if (i>=article[j].value && value[j][i]<sumValue+value[j-1][i-article[j].value])
{
value[j][i] = sumValue+value[j-1][i-article[j].value
}
}//for money-金钱
}//for n-物品
cout<<value[totalArticle][totalMoney];
return 0;
}