牛客練習賽36 Rabbit的工作 2

2021-09-30 19:30:30 字數 1847 閱讀 5698

rabbit的工作(2)

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

rabbit通過了上次boss的考核,現在她又遇到了乙個問題。

rabbit接到了k個任務,每個任務她可以自由選擇用i天去完成(1≤ i≤ n)。刁鑽的boss想讓rabbit恰好用w天完成所有任務。

已知rabbit用i天完成乙個任務能讓boss獲得的滿意度為vi(因為完成任務的質量不同),她想知道在滿足boss要求的情況下能讓boss獲得的總滿意度最大是多少。

第一行三個整數n,k,w。

第二行n個整數vi,vi表示用i天完成乙個任務能讓boss獲得的滿意度。

輸出rabbit在滿足boss要求的情況下能讓boss獲得的總滿意度最大是多少。
示例1

3 3 5

6 2 4

16
rabbit可以選擇分別用1天,1天,3天完成這三個任務,最大滿意度為6+6+4=16
2≤ n,k≤ 2000,k≤ w≤ min(4000,2*k)

0注意恰好完成,-1標記不能完成的情況。

dp[i][j]:第i個任務在第j天完成的最大收益。

dp[i][j]=max(dp[i][j],dp[i-1][j-k]+v[k])   k:rand(1-n)。

#include using namespace std;

#define ll long long

#define mod 1000000007

#define maxn 401

int dp[2005][4005];

int main()

for(int i=0;i<=k;i++)

for(int j=0;j<=w;j++)

dp[i][j]=-1;

dp[0][0]=0;

for(int i=1;i<=k;i++)}}

cout《先都按一天完成,這樣就可以裝換為完全揹包

dp[i][j]:對完成天數為i的任務進行pick時(選0個或多個),恰好多餘時間為j時能得到的最大收益。

dp[i][j]=max(dp[i][j-i+1]+v[i],dp[i-1][j]);

因為有負數所以初始化為int_min

#include using namespace std;

#define ll long long

#define mod 1000000007

#define maxn 401

int dp[2005][4005];

int main()

int re=v[1]*k;

w=w-k;

for(int i=0;i<=k;i++)

for(int j=0;j<=w;j++)

dp[i][j]=int_min;

for(int j=1;j<=n;j++)

dp[j][0]=0;

for(int i=2;i<=n;i++)

int re=v[1]*k;

w=w-k;

for(int i=0;i<=w;i++)

dp[i]=int_min;

dp[0]=0;

for(int i=2;i<=n;i++)

}printf("%d",re+dp[w]);

return 0;

}

01揹包:

完全揹包:

牛客練習賽36 BCDF題解

b.rabbit的工作 1 思路 設d i j p 為在 i 天時,一共工作了 j 天,且連續工作了 p 天直到第 i 天時花費的最小體力。那麼轉移方程很簡單 update 已經被hacked 如果第 i 天我不工作,那麼對於所有的合法的 p,d i j 0 max d i 1 j p 如果我第 i...

牛客練習賽36B題

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld rabbit大學畢業後找到了乙份實習工作,如果實習通過她就轉正了。實習期共有n天,其中有幾天公司集體放假,rabbit不用上班,剩下時間她可以選擇工作或者休息。rabb...

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...