C++.프로그래밍 문제.휴가 기간.동적 기획

실적이 우수하기 때문에 회사에서 Q군에게 n일의 휴가를 주었고 일벌레인 Q군은 방학 동안 일하거나 운동을 하거나 휴식을 취할 계획이다.그는 이틀 동안 일하거나 운동을 하지 않는 이상한 습관이 있다.회사가 영업할 때만 Q군이 일을 할 수 있고, 헬스클럽이 영업할 때만 Q군이 헬스를 할 수 있으며, Q군은 하루에 한 가지 일을 할 수 있다.방학 중 회사, 헬스클럽의 영업 상황을 제시하고 큐에게 최소 며칠은 휴식을 취해야 한다.
4
1 1 0 0
0 1 1 0
2

동태적인 기획을 통해 큰 문제를 작은 문제로 점차적으로 해결한다. 다음날은 어제 하지 않았던 일만 할 수 있기 때문이다. 매일의 일의 일의 점차적인 숫자는 어제 다른 두 가지 일의 최대치+1점차적인 숫자이다. 최종적으로 얻은 마지막 세 가지 일의 최대치는 쉬지 않고 일하는 일수의 최대치이고 총 일수에서 일하는 날을 빼면 쉬는 날이다.
#include 
#include 
#include 
using spacename std

int main(){
    int n;
    cin >> n;
    vector work(n), slg(n);
    for(int i=0; i> work[i];
    for(int i=0; i> slg[i];
    vector> dp(3, vector(n+1));
    int dp[0][0] = dp[1][0]=dp[2][0]=0;
    for(int i=1; i<=n; ++i){
        dp[0][i] = max(dp[0][i-1],max(dp[1][i-1],dp[2][i-1]));
        if(slg[i-1]){
            dp[1][i] = max(dp[0][i-1], dp[2][i-1])+1;
        }
        if(work[i-1]){
            dp[2][i] = max(dp[1][i-1], dp[0][i-1])+1;
        }
    }
    cout << n - max(dp[0][n],max(dp[1][n],dp[2][n])) << endl;

    return 0;
}

좋은 웹페이지 즐겨찾기