題目位址
轉移剩餘的空間,當前的剩餘的容量為j,則dp[j] 由 dp[j+a[i].p] 轉移過來。但是由於物品出現的位置不確定,所以要排個序。不理解要排序的可以用這兩組樣例試一下:
2 10
1 10 10
2 9 10
2 10
2 9 10
1 10 10
正解為20;
ac**:
#includeusing namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
namespace
}#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (int i = (n); i < (m); i++)
#define _rep(n,m,i) for (int i = (n); i <= (m); i++)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair#define fi first
#define se second
struct node
}a[550];
int dp[5500];
int main()
} cout << *max_element(dp, dp + m + 1) << endl;
} }
hdu 3466 排序01揹包
也是好題,帶限制的01揹包,先排序,再揹包 這題因為涉及到q,所以不能直接就01揹包了。因為如果乙個物品是5 9,乙個物品是5 6,對第乙個進行揹包的時候只有dp 9 dp 10 dp m 再對第二個進行揹包的時候,如果是普通的,應該會借用前面的dp 8 dp 7 之類的,但是現在這些值都是0,所以...
HDu3466 貪心 01揹包
解法 按照p q的大小排列順序,我們會優先選擇p q較大的結點。按照p q排列順序,就變成了01揹包的問題 但是dp和暴力剛好是兩個逆過程,我們暴力是優先選擇q p大的,dp的時候就要反過來,先遍歷q p小的。簡單的證明 當我們遇到兩個都可以選擇的同時被選的結點,pi qjusing namespa...
帶限制的01揹包 排序 hdu3466
如果沒有購買條件限制,這道題就是乙個01揹包。所以我們來處理限制。只 dp j a i p 最優,才能保證 dp j 最優,滿足無後效性。若想使 dp j a i p 最優,即要保證對於任意兩組值 p1,q1,v1 p2,q2,v2 假設先選擇1,若想滿足無後效性,則 j a 2 p a 1 q且 ...