p1417 烹調方案題目提供者tinylic
標籤動態規劃
難度普及+/提高
題目背景
由於你的幫助,火星只遭受了最小的損失。但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
502
2 47
輸出樣例#1:
408
說明 【資料範圍】
對於40%的資料1<=n<=10
對於100%的資料1<=n<=50
所有數字均小於100,000
【題目**】
tinylic改編
/*
w&t.
讀錯題目了啊啊啊啊啊啊.
(每種食材只能用一次qwq)
把所有情況處理了出來揹包dp.
*/#include
#include
#define maxn 51
#define maxm 100001
#define ll long long
using namespace std;
ll f[maxm],n,t,a[maxn],b[maxn],c[maxn],w[maxn*maxm],tot,v[maxn*maxm];
ll read()
while(ch>='0'&&ch<='9')x=x
*10+ch-48,ch=getchar();
return
x*f;
}void init()
void slove()
}void dp()
printf("%d",f[t]);
}int main()
/*
dp+貪心.
(國王遊戲類似).
可以考慮有兩個菜的三值分別為a1,b1,c1,a2,b2,c2
則兩種情況為a1-(t+c1)*b1+a2-(t+c1+c2)*b2 (1)
a2-(t+c2)*b2+a1-(t+c1+c2)*b1 (2)
如果(1)>(2)則化簡得c1*b2
*b1.
按照這個條件排序之後跑一邊01揹包.
*/#include
#include
#define maxn 51
#define ll long long
#define maxm 100001
using namespace std;
ll f[maxm],n,t,a[maxn],b[maxn],c[maxn],w[maxn*maxm],tot,v[maxn*maxm];
ll read()
while(ch>='0'&&ch<='9')x=x
*10+ch-48,ch=getchar();
return
x*f;
}void init()
void slove()}
}void dp()
for(int i=1;i<=t;i++) f[0]=max(f[0],f[i]);
printf("%d",f[0]);
}int main()
P1417 烹調方案
由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只...
洛谷P1417 烹調方案
由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只...
洛谷P1417 烹調方案
這道題不同於普通的01揹包,不同的先選擇的做菜策略會對之後產生不同的影響,即不滿足 無後效性 但是,考慮一種選擇策略,假設有兩個先後做的菜i和j,交換他們的順序會產生什麼影響呢?假設ij之前的時間為t 先i後j a i t c i b i a j t c i c j b j 先j後i a j t c...