傳送門
一維揹包優化
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);//判斷是放還是不放。
/**
* from:
* qingdao agricultural university
* created by xiangwangacmer
* date : 2019-09-29-22.19.46
* talk is cheap.show me your code.
*/#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace std;
const ll maxn =
1e5+5;
const ll minn =
1e9+5;
const ll mod =
1000000007
;const
int inf =
0x3f3f3f3f
;const
long
long limit =
4294967295ll
;//vectorv[maxn];
bool row[maxn]
, col[maxn]
;bool flag =0;
queue<
int>q;
int v[maxn]
,w[maxn]
,dp[maxn]
;int
main()
for(
int i=
1;i<=n;i++
)///種類
for(
int j=m;j>=v[i]
;j--
) cout<
}
二維未優化
f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]);//判斷這一態是否要加入放入物品
#include
#include
using
namespace std;
int f[27]
[30002
],v[27]
,w[27];
//f表示最大價值,v表示**,w表示價值
intmax
(int x,
int y)
//自定義x與y最大值max函式
intmain()
for(i=
1;i<=m;i++
)//i從1到m,列舉放不放第i件物品
for(j=
0;j<=n;j++
)//j表示當前揹包總大小
if(j>=v[i]
)//如果當前的揹包可以放第i件物品。
f[i]
[j]=
max(f[i-1]
[j],f[i-1]
[j-v[i]
]+w[i]);
//放第i件物品有沒有好處,是所有揹包問題的核心原始**,
else f[i]
[j]=f[i-1]
[j];
//當前的揹包放不下第i件物品
cout<[n];
//前m件物品(部分)放入乙個容量為n的揹包可以獲得的最優價值
}//上面的**是01揹包未優化的狀態,下面是重要優化**,二維陣列變一維陣列,牢記!
// for(i=1;i<=m;i++) //i從1到m,列舉放不放第i件物品 //下行只能倒敘,要保證
// for(j=n;j>=0;j--) //推f[v]時f[v-w[i]]儲存的是狀態f[i-1][v-w[i]]的值。
// if(j>=v[i]) //如果當前的揹包可以放第i件物品。
// f[j]=max(f[j],f[j-v[i]]+w[i]);// 取最大值
// cout<
洛谷 P1060 開心的金明(01揹包)
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過 n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的 n 元。於是,他把每件物品規定了乙個重要度...
洛谷 P1060 開心的金明 01揹包
題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過 n nn 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的 n nn 元。於是,他把每...
洛谷 P1060 開心的金明
題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要...