01揹包大家一定都會……
但如果01揹包的w很大怎麼辦……
此時我們觀察,若v[i]很小,我們可以考慮建立有關v[i]的方程
方程內容大概是:在達到某一v時,所需的總w最小
說多了不如上**:
1 #include2 #include3 #include4 #include5 #include6 #include7
using
namespace
std;
8int
n,m,sumv,ans;
9int dp[300][234000],w[500],v[500
],wi,vi;
10int a[300
];11
intmain()25}
26for(int i=1;i<=sumv;i++) if(dp[n][i]<=m) ans=i;
27 printf("
%d\n
",ans);
28return0;
29 }
DP 揹包問題
大牛 以下使用滾到陣列 若輸入要求一般,可以邊定義狀態邊輸入,不需儲存 memset f,0,sizeof int n 若求最小值,除 f 0 其餘初始化為 inf,f 0 0是必須的 求最大最小都一樣 確保有從無到有的起點 0 1揹包 一般形式 f i v max f i 1 v f i 1 v ...
揹包問題 DP
01揹包 現在有1個體積為mmax的揹包和n種物品 每種物品只有1個 每種物品的體積和價值分別是v i 和w i 求這個揹包最多可以裝價值多少的物品。這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不放。用子問題定義狀態 設f i j 表示前i件物品恰放入乙個容量為j的揹包可以獲得的最大...
DP 揹包問題
小明同學在參加一場考試,考試時間2個小時。試卷上一共有n道題目,小明要在規定時間內,完成一定數量的題目。考試中不限制試題作答順序,對於 i 第道題目,小明有三種不同的策略可以選擇 1 直接跳過這道題目,不花費時間,本題得0分。2 只做一部分題目,花費pi分鐘的時間,本題可以得到ai分。3 做完整個題...