noip模擬賽 bzoj2932旅行

2021-08-04 05:58:49 字數 971 閱讀 5591

題解:

話說這道題啊,是真的坑,正解不難,但是想歪是很簡單的,在常規的貪心不行的時候,本人就想到了dp,自我感覺

非常有道理,方程式也寫了出來,結果莫名wa了50%的資料,不懂,聽大牛說是因為不滿足最優子結構。。。。。。

表示:寫dp的時候從來沒有關注過這個東西

先說dp吧,dp[i][j]表示前i個人,有j個人在船上的最大快樂值

於是有:dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]-sumd[i-1][j-1]-(j-1)*d[i]+c[i])

sumd[i][j]就是dp[i][j]的d值之和,是不是感覺很有道理啊

但是,該dp不滿足最優子結構,可以設想一下,你取了乙個j,可能是能夠增加快樂值的,

但隨著人數的增加,選擇這個j在後面就漸漸的差了,不如不選

正解也不難

對於快樂值來說,我們可以得到乙個表示式:ans=sigma(c[i])-(n-1)*sigma(d[i]) (n是人數)

於是我們列舉人數,並且排序,如果i比j優,那麼滿足:c[i]-(n-1)*d[i]>c[j]-(n-1)*d[j]

不斷sort,最後答案取最大值就可以了

code:

#include#include#include#include#include#includeconst int maxn=1005;

using namespace std;

int n,c[maxn],d[maxn];

int tmp[maxn],ans[maxn];

bool cmp(int a,int b)

int main()

int res=0,num=0;

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

if(res<=ans[i]) res=ans[i],num=i;

printf("%d\n%d\n",res,num);

}

2932 NOIP2012模擬8 7 奶牛編號

作為乙個神秘的電腦高手,farmer john 用二進位制數字標識他的奶牛。然而,他有點迷信,標識奶牛用的二進位制數字,必須只含有k位 1 1 k 10 當然,每個標識數字的首位必須為 1 fj按遞增的順序,安排標識數字,開始是最小可行的標識數字 由 1 組成的乙個k位數 不幸的是,他沒有記錄下標識...

noip模擬賽 bzoj2237龍珠雷達

題解 一道dp題,恩,沒錯,非常好,時間複雜度o n m m 爆了,恩,沒錯,非常好,看了是要優化了 讓我看看,恩,不是線段樹優化,不是斜率優化,不是四邊形不等式優化,what?那是什麼?行,我寫暴力 t2打成t1,原本70分 成功爆0 所以說,我,這個,i,應該忘記了,除了這些高大上的優化以外,還...

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...