简单的01背包问题(采药)

来源:互联网 发布:天狼星加密软件多少钱 编辑:程序博客网 时间:2024/05/16 05:01

题目出自:http://www.acmicpc.sdnu.edu.cn/Problem.aspx?pid=1033

写了好久vs上编译没错误,可是OJ就是不过,希望有那位大神指点下。

下面附上代码.

#include<iostream>
#include<stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int a[1001][2];//时间,价值
int b[1001][1001] = { 0 };
int t, n;
scanf("%d%d", &t, &n);
for (int i = 1; i <= n; i++)
{
scanf("%d%d", &a[i][0],&a[i][1]);
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <=t; j++)
{

if (j >= a[i][0])
{
b[i][j] = max(b[i - 1][j], b[i - 1][j - a[i][0]] + a[i][1]);

//只有这句是个重点,假如猜到第b颗药,那么下一颗草药采不采呢,就需要比较啦,如果价值变大为何不采呢。
}
else
{
b[i][j] = b[i - 1][j];
}

}
}
cout << b[n][t]<<endl;
return 0;
}

0 0