SRM 487 DIV1 Easy - BunnyComputer x

問題


http://community.topcoder.com/stat?c=problem_statement&pm=11157&rd=14240

Bコンピュータをすべてのうさぎが使いたい。
ただしBコンピュータは1台しかないため、1度に1匹のうさぎしか使えない。

うさぎがタスクをこなすのに、1秒Bコンピュータを専有し、その後K秒机上で計算を行い、その後1秒コンピュータを専有する。

コンピュータを専有する時間によってpreferenceの値が与えられ、この時間を最大化したい。
その最大値を求める。

解き方


スタート時間を0〜Kとし、各スタート時間に対しK+1秒ごとに同じ集合に
することができる。

この集合ごとに得られるpreferenceを最大化し、その和を求める。
各集合についてpreferenceを最大化する選び方は貪欲法では難しいので
dpを用いればよい。

コード


class BunnyComputer {

public: int getMaximum(vector<int> preference, int k) {
int n=preference.size();
int ret=0;

for(int i=0;i<k+1;i++){
vector<int> vx;
for(int j=i;j<n;j+=k+1)vx.push_back(preference[j]);

int m=vx.size();
int dp[m+1];
memset(dp,0,sizeof(dp));
for(int j=2;j<=m;j++){
dp[j]=max(dp[j],dp[j-1]);
dp[j]=max(dp[j],dp[j-2]+vx[j-2]+vx[j-1]);
}

ret+=dp[m];
}

return ret;
}

};

Share this

Related Posts

Previous
Next Post »