POJ 2063 Investment 完全背包
2013-08-22 23:52
429 查看
/** * 完全背包: * 这题很裸的完全背包。不过居然还各种RE和WA。。。 * 首先是RE: 因为每次都会有利息,加上原来的本金之后的资金肯定是会大于原来的最大值。 * 数组开大个5倍就够了。 因为题意是利息不超过10%,年数不超过40.这个随便算下,或者开个足够大就行。 * 其次WA的原因:因为我在实现的时候,用了个变量extra去存不足1000的部分。而忘记了一开始的本金就可能不是1000的倍数 * 所以一开始就要extra = m % 1000; * 还有再说下,这题貌似必须 除以1000 来去处理,不然可能会MLE的。 */ #include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <string> #include <queue> #include <map> #include <vector> #include <algorithm> #define DEBUG 0 #define INF 0x7fffffff #define MAXS 100 typedef long long LL; using namespace std; int value[MAXS], interest[MAXS], dp[100000]; int dpf(int n, int m) { memset(dp, 0, sizeof(dp)); for(int i = 0; i < n; i ++) { for(int j = value[i]; j <= m; j ++) { dp[j] = max(dp[j], dp[j-value[i]] + interest[i]); } } return dp[m]; } int main() { int cases; cin >> cases; while(cases --) { int n, m, years, extra; cin >> m >> years; cin >> n; extra = m % 1000; /** 因为漏了这个WA了3次!! */ m /= 1000; for(int i = 0; i < n; i ++) { cin >> value[i] >> interest[i]; value[i] /= 1000; } for(int i = 1; i <= years; i ++) { extra += dpf(n, m); m += extra / 1000; extra %= 1000; } cout << m * 1000 + extra << endl; } return 0; }
相关文章推荐
- POJ 2063 Investment【完全背包】
- poj 2063 Investment (dp 完全背包)
- POJ 2063 Investment【经典完全背包】
- POJ 2063 Investment (完全背包)
- POJ 2063 Investment【经典完全背包】
- POJ-2063--Investment (完全背包)
- POJ 2063 Investment (完全背包)
- POJ 2063 Investment(完全背包问题)
- POJ 2063 Investment(完全背包)
- POJ 2063 - Investment(完全背包)
- POJ-2063 Investment (完全背包 简单题)
- Investment 完全背包 POJ 2063
- POJ 2063 Investment(完全背包)
- POJ 2063 Investment 完全背包问题
- POJ 2063 Investment(dp ,空间压缩,完全背包)
- POJ 2063 Investment(完全背包)
- Poj 2063 Investment (完全背包)
- poj 2063 Investment 完全背包
- POJ 2063 Investment(完全背包)
- POJ 2063 Investment(完全背包)