這個題目不是單純的01揹包問題,因為01揹包給出的物品的價值是不變的,但是這個題目中物品的價值會隨著時間的增長而降低,所以要確定什麼優先順序取(x,y)才會得到更有的結果,所以就涉及到了排序和貪心。還有一點與01揹包不痛,完後第n件物品的完成時時間越少越好,因為時間長了之後物品的價值下降,所以最後時刻完成的不一定是最優結果。證明過程如下:(參考洛谷某部落格)
**如下:
1 #include2using
namespace
std;
3 typedef unsigned int
ui;4 typedef long
long
ll;5 typedef unsigned long
long
ull;
6#define pf printf
7#define mem(a,b) memset(a,b,sizeof(a))
8#define prime1 1e9+7
9#define prime2 1e9+9
10#define pi 3.14159265
11#define lson l,mid,rt<<1
12#define rson mid+1,r,rt<<1|1
13#define scand(x) scanf("%llf",&x)
14#define f(i,a,b) for(int i=a;i<=b;i++)
15#define scan(a) scanf("%d",&a)
16#define dbg(args) cout<
#define inf 0x3f3f3f3f
18#define maxn 100005
19int
n,m,t;
20ll dp[maxn];
21struct
nodep[maxn];
24bool cmp(node& x,node&y)
2528
intmain()
2944 ll ans=0
;45 f(i,1,t)ans=max(ans,dp[i]);//
完成第n件的時間越短,結果可能更優
46 pf("
%lld
",ans);
47 }
洛谷P1417 烹調方案 貪心 揹包dp
題目大意 一共有 n 件食材,每件食材有三個屬性,ai,bi和ci,如果在t時刻完成第i樣食材則得到ai t bi的美味指數,用第i件食材做飯要花去ci的時間。眾所周知,gw的廚藝不怎麼樣,所以他需要你設計烹調方案使得美味指數最大。題解 這道題需要對揹包問題有更加深入的理解。可以發現,如果不進行排序...
洛谷 P1417 烹調方案 (01揹包拓展)
一看到這道題就是01揹包 但是我注意到價值和當前的時間有關。沒有想太多,直接寫,0分 然後發現輸入方式不對 改了之後只有25分 我知道wa是因為時間會影響價值,但不知道怎麼做。後來看了題解,發現我對01揹包理解不夠透徹 普通01揹包做下來放入物品的順序是1到n的 因為這個時候順序沒有關係,所以可以直...
洛谷 P1417 烹調方案 排序 01揹包
洛谷 p1417 烹調方案 排序 01揹包 那麼首先裝物品y所獲得的價值為 a y p c y b y a x p c y c x b x 對這兩個式子化簡,得到 的條件是c x b y include include include include include include include ...