题目链接:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2526
题目大意:
山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。给你一段时间,在这段时间里,采到一些草药,让采到的草药的总价值最大。
AC程序:
#include <iostream>
#include <cstring>
using namespace std;
int a[110], b[110], p[1010][102];
int dp(int shijian, int shanshu){
if(shijian == 0 ||shanshu == 0)
return 0;
if(p[shijian][shanshu] != -1)
return p[shijian][shanshu];
int min = -1;
//不够开采或够但是不开
int temp = dp(shijian, shanshu - 1);
min = temp > min ? temp : min;
//时间开采,然后开采
if(a[shanshu] <= shijian){
temp = dp(shijian - a[shanshu], shanshu - 1) + b[shanshu];
min = temp > min ? temp : min;
}
p[shijian][shanshu] = min;
return min;
}
int main(){
//freopen("in.txt", "r", stdin);
int m, n, i;
while(cin>>m>>n){
memset(p, -1, sizeof(p));
for(i = 1; i <= n; i++){
cin>>a[i]>>b[i];
}
cout<<dp(m, n)<<endl;
}
return 0;
}