投资的最大效益
标准完全背包
\[f[i] = max(f[i],f[i - v[i]] + w[i])
\]
思路见注释:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 10000,M = 45;
int w[M],v[M],f[N];
int n,s,d;
int main()
{
scanf("%d%d%d",&s,&n,&d);
for(int i = 1 ; i <= d ; i ++ )
scanf("%d%d",&v[i],&w[i]);
for(int i = 1 ; i <= n ; i ++ )//用来更新本金
{
int m = s / 1000;//a>=1000所以本金除1000无影响
for(int j = 1 ; j <= d ; j ++ )
{
int mk = v[j]/1000;//本金除1000,所以投资额也要除1000
for(int k = mk; k <= m ; k ++ )
if(k >= mk) f[k] = max(f[k],f[k - mk] + w[j]);
}
s += f[m];
memset(f,0,sizeof f);
}
printf("%d",s);
}
“风雪越是呼啸,雪莲越是绽放”

浙公网安备 33010602011771号