东东也是个天资聪颖的孩子,他的梦想也是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是东东,你能完成这个任务吗?( 和同样采药的辰辰不同,东东采集一株草药所需的时间可能是个实数!)
输入描述
第 1 行,包含 2 个整数 T 和 N
接下来 N 行,每行包含一个 实 数 t 和一个整数 v,分别表示采摘某株草药所需的时间和这株草药的价值
【测试数据范围】
1≤T≤1000,1≤N≤100,1≤v≤100 1≤t≤100 且 t 至多含有 12 位,如 99.1234567890、9.91234567890 输出描述
输出一行,包含一个整数,代表在规定的时间内可以采到的草药的最大总价值
代码如下:
#include<bits/stdc++.h>
using namespace std;
double t[101],f[1000001];
int v[101];
int main()
{
int T,n;
cin>>T>>n;
for (int i=1;i<=n;i++)
{
cin>>t[i]>>v[i];
}
for (int i=1;i<=n;i++)
{
for (int j=1000001;j>0;j--)
{
if (j>=v[i]) f[j]=max(f[j],f[j-v[i]]+t[i]);
}
}
int maxn=-1;
for (int i=1000001;i>0;i--)
{
if (f[i]<=T)
{
cout<<i;
break;
}
}
return 0;
}