「剁手計畫第一彈」 DP動態規劃

2021-10-22 21:26:01 字數 4117 閱讀 6531

nasa食物問題

這是一道資料量比較小的01揹包

01揹包剛入門所以我只會背公式……背的還是錯的

揹包第一次**:30分(好傢伙,原地去世)

//p1507 nasa食物計畫

#include

#include

#include

using

namespace std;

int v,m;

int n;

struct foodf[55]

;int dp[55]

[400][

400]=;

int ans=0;

intmain()

for(

int i=

1;i<=n;i++)}

}}//printf("答案\n");

printf

("%d\n"

,ans)

;return0;

}

後來改用稍微熟悉一點的dfs,居然過了~~

//dfs:nasa食物計畫

#include

#include

#include

#include

struct foodf[50]

;int v,m;

int n;

int ans;

void

dfs(

int id,

int nv,

int nm,

int nc)

//購買id件物品

if(nv+f[id]

.v<=v&&nm+f[id]

.m<=m)

dfs(id+

1,nv+f[id]

.v,nm+f[id]

.m,nc+f[id]

.c);

}//不買

dfs(id+

1,nv,nm,nc);}

intmain()

dfs(0,

0,0,

0);printf

("%d\n"

,ans)

;}

不開玩笑了,揹包還是得會的……

//p1507 nasa食物計畫

#include

#include

#include

using

namespace std;

int v,m;

int n;

//常見的01揹包公式:f[j]=maxf[55]

;int dp[

400]

[400]=

;int ans=0;

intmain()

for(

int i=

1;i<=n;i++)}

}}//printf("答案\n");

printf

("%d\n"

,ans)

;return0;

}

開心的金明

這題資料量也不大,但是dfs死迴圈了,懶得改……好吧,沒找到邏輯bug

但是揹包公式可以套用就……爽翻啦!

看看,這簡潔的介面~~

//開心的金明

#include

#include

#include

using

namespace std;

int n,m;

struct thingt[30]

;//dfs不靠譜

int dp[

30000]=

;//下標表示錢數

int ans=0;

intmain()

for(

int i=

0;iprintf

("%d\n"

,ans)

;return0;

}

通天之分組揹包

這題我一開始的理解,覺得樣例是錯的……

一開始的思路是:盡可能裝一種id的物品,使得價值最大化

啊,懷疑樣例的都是蠢貨

40分:

//通天之分組揹包

#include

#include

#include

using

namespace std;

struct bagbag[

1001];

int n,w;

bool

cmp(bag a,bag b)

int dp[

1001][

1001];

intmain()

//對每個組分別用01揹包

int ans=0;

for(

int i=

0;i}printf

("%d\n"

,ans)

;return0;

}

後來我在想,是不是只需要輸出一種id的物品,它的重量//通天之分組揹包

#include

#include

#include

using

namespace std;

struct bagbag[

1001];

int n,w;

bool

cmp(bag a,bag b)

int dp[

1001][

1001];

intmain()

//對每個組分別用01揹包

int ans=0;

for(

int i=

0;i}printf

("%d\n"

,re)

;return0;

}而且樣例過得和40分的那個還不一樣,氣死我啦~

下面是:

ac的大佬的**~~ 主要是我寫不動了

#include

#include

#include

#include

using

namespace std;

int zhong[

1001

],jia[

1001

],a[

1001][

1001

],bb[

1001];

//物品的重量 價值 記錄分組 揹包

intmain()

for(

int i =

1;i <= mxzu;

++ i)

for(

int j = m;j >=

0;j --

)for

(int k =

1;k <= a[i][0

];++ k)

if(j >= zhong[a[i]

[k]]

)//判斷是否越界

bb[j]

=max

(bb[j]

,bb[j - zhong[a[i]

[k]]

]+ jia[a[i]

[k]]);

//比較找最大的然後更新

printf

("%d\n"

,bb[m]);

return0;

}

//通天之分組揹包

//模板題目

#include

#include

#include

using

namespace std;

const

int maxn=

1011

;struct nodegroup[maxn]

[maxn]

;int num[maxn]

,dp[maxn]

;int m,n,maxl=

-10000

;int

main()

for(

int i=

1;i<=maxl;i++)}

}}}printf

("%d\n"

,dp[m]);

return0;

}

菜鳥部落格第一彈

隨著乙個多月的大學生活結束,今天終於開始了畢業的第一天工作。請了40多天的假,本來以為工作會悲劇的。但到公司同事和領導的關心使我擔心的小心感到了溫暖。早就想實現這個計畫,想在正式工作的時候寫部落格,也就是想記錄下每天的工作和每天的心情。寫博主要是記下這剛開始艱苦的歲月,不求對別人幫助,本人是菜鳥,歡...

oracle學習第一彈

每當我們建立資料庫例項的時候,就會自動的建立三個使用者 sys使用者 超級管理員,許可權最大 system使用者 系統管理員 scott使用者 普通使用者 有三種方式登入oracle資料庫 1.命令列sqlplus 2.sql developer 3.企業管理器,通過web訪問 sql plus是o...

日常翻譯 第一彈

第一題鏈結 題意 夏洛克和華生正在玩乙個遊戲 nim 這個遊戲有n堆石子被標註成piles1,piles2,pilesn n是石子最大堆數 夏洛克總是第乙個,華生跟他交替進行操作 在每一次操作中都有且只有兩種可能的情況 1.選擇一堆並且從中拿走k個石子,k 0 2.從每一堆石子中都拿走k個石子,k ...