USACO動態規劃之揹包問題1

2022-05-31 03:48:09 字數 2433 閱讀 9929

序言

dp太辣雞所以要刷題!做完usaco裡dp專題的所有題!【然而還有數字dp插頭dp的都還不會qwq

題目+題解

一、subset sums, usaco 1998 spring

解題思路

因為平分,所以以和的一半當總容量做01揹包。答案除以2,因為會重複算一次

#include#include#include#include#includeusing namespace std;

#define maxn 11000

long long f[maxn];

int main()

二、[bzoj1739][poj2392]space elevator, usaco 2005 mar

解題思路

算是加點限制的多重揹包?

f[i]表示能否搭到高度為i..

if (f[j-k*a[i].h]) f[j]=1;k列舉使用第i塊的個數

#include#include#include#include#includeusing namespace std;

#define maxn 410

struct node

a[maxn];int f[maxn*100];

int mymin(int x,int y)

三、[poj2184]cow exhibition,usaco 2003 fall

解題思路

f[i]就表示當智商為i時的最大情商。

因為有負數,所以有個基準值(設為)xx

轉移:if(f[j-s[i]+xx]!=inf)  f[j+xx]=max(f[j+xx],f[j-s[i]+xx]+q[i]);

這樣的話,因為s[i]的正負性不確定,你並不能知道j-s[i]與j的大小關係(即方程的轉移方向)

所以要對s[i]正負的不同做不同的處理[wa了很久= =還不造為什麼。。因為根本沒有考慮到orz]

#include#include#include#include#includeusing namespace std;

#define maxn 1001000

#define inf -1e9

int f[maxn],s[110],q[110];

int mymax(int x,int y)

int main()

n=ln;int pz=-xx;

for (j=0;j<=lm+xx;j++) f[j]=inf;

f[xx]=0;

for (i=1;i<=n;i++)

else

}for (i=xx;i<=lm+xx;i++)

if (f[i]>=0) ans=mymax(ans,i-xx+f[i]);

printf("%d\n",ans);

return 0;

}

四、[bzoj1655]dollar dayz,usaco 2006 jan

解題思路

f[i]表示數目為i時的劃分的方案數

f[i]+=f[i-j];水..但是要打高精度!

[太水了。。**就不貼了占地]

五、[bzoj1578]stock market,usaco 2009 feb

解題思路

f[i]表示第i天能獲得的最多的錢

f[i]=max(f[i-1],g[f[i-1]]);

g[i]表示有i錢時得到的最多的錢。

對每天做01揹包,k列舉錢,第j天,第i只**

g[k]=max(g[k],g[k-p[i][j-1]]+p[i][j]);

能一天一天的買賣**的原因是,今天買了某只**,若後來在較高點賣出的話,相當於在這期間以沒那麼高的**賣了一次又買了一次。若期間的**都比今天低,那不如在最低的那天再買,弄回前面這種情況。

最後進行最上面的f的轉移。

p.s.我好像有乙個點還是tle的。。。

#include#include#include#include#includeusing namespace std;

const int mx=500000;

int p[60][110],f[110],g[mx+10];

int main()

printf("%d\n",f[d]);

return 0;

}

USACO3 1 2 總分 揹包問題動態規劃

完全揹包問題。f i j 表示用前j個物品,放滿i的空間,能取得最大價值。f i j max f i a p j 1 b p j按順序用的話,陣列第二維可以壓掉。即為f i max f i a p b p executing.test 1 test ok 0.008 secs,3484 kb tes...

揹包型動態規劃 揹包問題1

在n個物品中挑選若干物品裝入揹包,最多能裝多滿?假設揹包的大小為m,每個物品的大小為a i 示例 樣例 1 輸入 3,4,8,5 backpack size 10 輸出 9 樣例 2 輸入 2,3,5,7 backpack size 12 輸出 12 首先要明確一點,在揹包問題中,陣列大小和總稱重有...

動態規劃之揹包問題

最近刷題遇到好幾道揹包問題,揹包問題是動態規則中的一類體型,在考察演算法的筆試中經常遇到。關於揹包問題,文章 揹包問題九講 中已經做了很多分析,這裡就不再細述,建議好好看看這篇文章。然而文章給了許多案例分析,卻沒有很好的練習。說明 1 本文目的不在於講解揹包問題的分析與講解,而是收集了一些揹包問題。...