NOIP2015模擬11 3 備用鑰匙

2021-07-11 07:01:56 字數 2059 閱讀 2968

你知道just odd inventions社嗎?這個公司的業務是「只不過是奇妙的發明(just odd inventions)」。這裡簡稱為joi社。

joi社有n名員工,編號從1到n。所有員工的工作時間從時刻0持續到時刻m,時刻0和時刻m的時候,所有員工都必須在公司內。

某天,出於巧合,joi社的每個員工都要出行恰好一次。員工i(1<=i<=n)在時刻si離開公司,時刻ti回到公司。同一時刻不會同時有兩名以上的員工離開或回到公司。

joi社的入口處有一扇巨大的門,員工只能通過這扇門離開或回到公司。門上掛著一把鎖,從公司內部可以任意開鎖或上鎖,但從公司外部只有持有備用鑰匙的人才能開鎖或者上鎖。時刻0時,鎖是鎖上的。

每個社員在回到公司的時候,都必須能夠進入公司。換句話說,對於任意1<=i<=n,要麼員工i持有備用鑰匙,要麼時刻ti時門是開著的,否則是不被允許的。員工回到公司的時候,或者攜帶備用鑰匙的員工離開公司的時候,可以選擇鎖門或不鎖。沒有攜帶備用鑰匙的員工離開公司的時候沒有辦法鎖門。

joi社的社長決定把備用鑰匙交給n個員工中的k個人。為了避免鑰匙的丟失,員工之間不允許借用鑰匙。此外,joi社的社長很重視時間效率,因此每個員工在離開或回到公司的時刻以外,不允許開鎖或者上鎖。

出於安全的考慮,社長希望上鎖的時間越長越好。現在他將員工出入公司的資訊和準備交給員工的鑰匙數量告訴了你,請你求出在能使所有員工回到公司的時候都能進入公司的大門的前提下,上鎖的時間最長是多少。

這一題的解法特殊,

首先對於兩個相鄰的時間點,有4種情況:

第一種:左出右出

只需要左端點那個人帶鑰匙該區間便可取。

第二種:左出右進

兩人都帶鑰匙該區間便可取。

第三種:左進右出

都不用拿,直接計入答案。

第四種:左進右進

右端點那個人帶鑰匙該區間便可取

我們發現,有些時段的取或不取只取決於乙個點,相當於只要這個人有鑰匙他就有一定的貢獻,所以每個人都有乙個貢獻值,

而對於那些兩個都取了才有貢獻的,我們可以連一條邊,這樣相當於如選我和我連邊的點就有額外的貢獻值,而且連得邊一定是一條鏈,

那我們就可以把題目轉換成:選每個點都有貢獻值,而選了當前點又選了上乙個點又另外獎勵,

於是就可以設dp:f[i][j]表示做到點i,選了j個,

轉移:f[i][j]=max(max(f[1~(i-2)][j-1]),f[i-1][j-1]+v[i])+p[i];

顯然max(f[1~(i-2)][j-1])可以開陣列優化,所以轉移複雜度o(1),

#include

#include

#include

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fo1(i,a,b) for(int i=a;i>=b;i--)

//#define read(a) scanf("%d",&a)

using namespace std;

typedef long long ll;

const int n=2500,maxlongint=2147483640;

const ll inf=9223372036854775800;

intread(int &n)

intm,n,ans,mt;

struct qw

a1[n*2];

struct qqwwa[n];

int f[n][n],f0,f[n];

bool z[n];

bool px(qw a,qw b)

}void dfs(int

q)int main()

else a[q].p+=a1[i+1].t-a1[i].t;

}fo1(i,n*2,1)

if(a1[i].s) if(!z[a1[i].n])

q=ans;

fo(i,1,f0)ans=max(ans,q+f[i][m]);

printf("%d\n",ans);

return

0;}

NOIP2015模擬11 3 備用鑰匙

你知道just odd inventions社嗎?這個公司的業務是 只不過是奇妙的發明 just odd inventions 這裡簡稱為joi社。joi社有n名員工,編號從1到n。所有員工的工作時間從時刻0持續到時刻m,時刻0和時刻m的時候,所有員工都必須在公司內。某天,出於巧合,joi社的每個員...

NOIP2015模擬11 3 裝飾大樓

給出乙個序列a,ai表示對於乙個h序列來講,以i結尾的lis的長度。h中的數兩兩不等。現在你知道了a刪去乙個數之後的序列b 未知刪掉哪位 求a序列有多少種。a 10 6 好多細節呀!不爽,懶得打題解。可以發現,對於乙個序列a,它滿足條件的前提就是,對於每乙個ai,都存在乙個aj j i 滿足aj 1...

裝飾大樓 NOIP2015模擬11 3

其實和這東西只是扯上邊而已,完全沒有考演算法 切入正題 際資訊學奧林匹克競賽將要在日本召開了。為了歡迎全世界的選手們,委員會決定將從機場到宿舍沿路的大樓裝飾起來。根據某著名設計師的設計,做裝飾的大樓從機場到宿舍的方向必須高度嚴格遞增。也就是說,如果做裝飾的大樓從機場開始高度順次為hi,那麼必須滿足h...