hdu 1963 Investment 完全背包

xiaoxiao2021-02-28  60

题意:某人有一些钱,可以用钱去银行购买债券,用来获得利息。给定购买的年数,每年可以更换购买的债券类型。给定一些债券的价格(是1000的整数倍)和可以获得的利息。年数到时可以获得的钱数的最大值。

思路:价值总是1000的倍数,就可以用1个单位代表1000.数组就可以开得下了。

#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 2000010; int a[20],b[20]; int dp[maxn]; int main() { int t; // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); scanf("%d",&t); while(t--) { int n,m,d; scanf("%d%d",&m,&d); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&a[i],&b[i]); a[i]/=1000; } int c; for(int k=0;k<d;k++) { c=m/1000; memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) for(int j=a[i];j<=c;j++) dp[j]=max(dp[j],dp[j-a[i]]+b[i]); //printf("%d\n",dp[m]); m+=dp[c]; } printf("%d\n",m); } }

转载请注明原文地址: https://www.6miu.com/read-55568.html

最新回复(0)