P1417 烹調方案 泛化物品揹包

2022-05-18 05:45:58 字數 2446 閱讀 6831

由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題:肚子餓了~

gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只好求助於你了。

一共有n件食材,每件食材有三個屬性,ai,bi和ci,如果在t時刻完成第i樣食材則得到ai-t*bi的美味指數,用第i件食材做飯要花去ci的時間。

眾所周知,gw的廚藝不怎麼樣,所以他需要你設計烹調方案使得美味指數最大

第一行是兩個正整數t和n,表示到達地球所需時間和食材個數。

下面一行n個整數,ai

下面一行n個整數,bi

下面一行n個整數,ci

輸出最大美味指數

輸入 #1複製

74 1

5022

47

輸出 #1複製

408

【資料範圍】

對於40%的資料1<=n<=10

對於100%的資料1<=n<=50

所有數字均小於100,000

【題目**】

tinylic改編

思路

第一眼覺得是乙個01揹包問題,寫了寫過了樣例,但是只能過6個點。

然後發現由於時間不同,實際上每個物品的價值也會受到影響。

一種物品在不同的時間上可以看作是多種物品。

可以用數學歸納法證明:

假設對於相鄰的兩個時間點x和y

分別有兩種不同的價值

若先選x(也就是後選y,t[x]=t+c[x],t[y]=t+c[x]+c[y]):

v1=a[x]-(t+c[x])*b[x]+a[y]-(t+c[x]+c[y])*b[y]

若先選y:

v2=a[y]-(t+c[y])*b[y]+a[x]-(t+c[y]+c[x])*b[x]

假定先選x價值大

將v1、v2去括號展開,相減

最終得到:c[y]*b[x]>c[x]*b[y];

由此,保證了取得區域性最優解的情況下進行01揹包,就可以求解出答案了

code

#include

<

bits/stdc++.h

>

#define

dbg(

x) cout <<

#x<<"=

"<< x << endl

#define

eps1e-

8#define

piacos(

-1.0

)using

namespace std;

typedef

long

long ll;

const

int inf =

0x3f3f3f3f

;template

<

class t>

inline

void

read(t &

res)

namespace _buff 

return ib == ie ?-1

:*ib++;}

}int

qread()

if(c =='-

')for(; c >='0

'&& c <='9

'; c =

getc())

return pos ? ret :

-ret;

}const

int maxn =1e

5+7;

int t, n;

struct node 

v[maxn];

ll f

[maxn];

bool

cmp(node x

, node y

)int

main()

for(

int i =

1; i <= n;

++i )

for(

int i =

1; i <= n;

++i )

ll ans = int_min;

sort(v +

1, v + n +

1, cmp);

for(

int i =

1; i <= n;

++i )

}for

(int i =

0; i <= t;

++i )

cout << ans << endl;

return0;

}

P1417 烹調方案

p1417 烹調方案 題目提供者tinylic 標籤動態規劃 難度普及 提高 題目背景 由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希...

P1417 烹調方案

由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只...

洛谷 P1417 烹調方案 揹包dp

由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只...