螞蟻的難題(三)

2021-07-11 00:10:20 字數 1211 閱讀 5508

描述

螞蟻終於把盡可能多的食材都搬回家了,現在開始了大廚計畫。

已知一共有n件食材,每件食材有乙個美味度ai和新鮮度bi, 如果螞蟻在第t時刻將第i樣食材烹飪成功,則得到ai-t*bi的美味指數,當然,用第i件食材做飯要花去ci的時間。

眾所周知,螞蟻的廚藝不怎麼樣,所以他需要你設計做飯方案使得在時間 

t

內完成的美味指數最大。

輸入

有多組測試資料。

第一行是兩個正整數,表示螞蟻的做飯時間t和食材個數n。(n<=50, 1<=t<=100000)。

接下來n行,每行有三個數,ai,bi,ci。分別代表美味度、新鮮度和用該食材做飯花費的時間。(0輸出

輸出乙個數字,表示最大美味指數

樣例輸入

6 1

200 5 1

樣例輸出

195思路:

如果沒有b[i]這個屬性的話就是明顯的01揹包問題。

現在考慮相鄰的兩個物品x,y.假設現在已經耗費p的時間,那麼分別列出先做x,y的代價:

a[x]-(p+c[x])*b[x]+a[y]-(p+c[x]+c[y])*b[y]   ①

a[y]-(p+c[y])*b[y]+a[x]-(p+c[y]+c[x])*b[x]   ②

對這兩個式子化簡,得到 ①>② 的條件是 c[x]*b[y]

發現只要滿足這個條件的物品對(x,y),x在y前的代價永遠更優。

因此可以根據這個條件進行排序,之後就是簡單的01揹包了。

#include#include#include#define max(x,y) x>y?x:y

#includeusing namespace std;

struct nodee[55];

long long dp[100005];

int cmp(const void *x,const void *y)

int main()

} for(i=1;i<=t;i++)

printf("%lld\n",dp[0]);

} return 0;

}

螞蟻的難題 三

螞蟻的難題 三 時間限制 2000 ms 記憶體限制 65535kb 難度 4 描述 螞蟻終於把盡可能多的食材都搬回家了,現在開始了大廚計畫。已知一共有n件食材,每件食材有乙個美味度ai和新鮮度bi,如果螞蟻在第t時刻將第i樣食材烹飪成功,則得到ai t bi的美味指數,當然,用第i件食材做飯要花去...

nyoj 747 螞蟻的難題 三

時間限制 2000 ms 記憶體限制 65535 kb 難度 4 描述 螞蟻終於把盡可能多的食材都搬回家了,現在開始了大廚計畫。已知一共有n件食材,每件食材有乙個美味度ai和新鮮度bi,如果螞蟻在第t時刻將第i樣食材烹飪成功,則得到ai t bi的美味指數,當然,用第i件食材做飯要花去ci的時間。眾...

螞蟻的難題(二)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 下雨了,下雨了,螞蟻搬家了。已知有n種食材需要搬走,這些食材從1到n依次排成了乙個圈。小螞蟻對每種食材都有乙個喜愛程度值vi,當然,如果vi小於0的時候,表示螞蟻討厭這種食材。因為馬上就要下雨了,所以螞蟻只能搬一次,但是能夠搬走...