poj 2063 Investment(01背包变形)
生活随笔
收集整理的這篇文章主要介紹了
poj 2063 Investment(01背包变形)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://poj.org/gotoproblem?pid=2063?
(1)上限 m 一直上升的 n 次01背包問題,比一般的01背包多了一重循環(huán);
(2)本題出現(xiàn)了各種錯(cuò)誤:1)剛開始,沒注意 m 變大會(huì)影響 dp 的上限,開了個(gè)dp[1100000], RE;
????2)由于 m 的只比較大, 開了個(gè)dp[8000000],MLE(內(nèi)存不夠);
?????????????????????????????????? 3)改小為dp[5000000], TLE(超時(shí));
?????????????????????????????????? 4)為什么要開這么大數(shù)組,好像是因?yàn)?m 太大了。。
重新讀題,
The value of a bond is always a multiple of $1 000.
終于降下了內(nèi)存,少了1000倍的無用功。
具體代碼:
View Code #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int N=50000; const int Inf=1<<29; int n, m, d; int dp[N]; int v[15], in[15]; int main() {int i, j, k, t;while(scanf("%d", &t)!=EOF){while(t--){scanf("%d%d%d", &m, &n, &d);for(i=1;i<=d;i++) scanf("%d%d", &v[i], &in[i]), v[i]/=1000;int tm;for(i=1;i<=n;i++){memset(dp, 0, sizeof(dp));tm=m/1000;for(j=1;j<=d;j++)for(k=v[j];k<=tm;k++)dp[k]=max(dp[k], dp[k-v[j]]+in[j]);m+=dp[tm];}printf("%d\n", m);}}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/tim11/archive/2012/08/16/2643000.html
總結(jié)
以上是生活随笔為你收集整理的poj 2063 Investment(01背包变形)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA基础--JAVA中的反射机制详解
- 下一篇: IOS UINavigationCont