lightoj 1047 - Neighbor House DP

来源:互联网 发布:程序员去金融公司 编辑:程序博客网 时间:2024/05/29 23:23

有n个房子,每个房子都可以染红绿蓝三种颜色,并且给出了每个房子染每种颜色费用,相邻房子不能同色,求染完房子的最小费用。

dp[i][j]就是第i个房子染第j个颜色后的总费用。简单的DP..

#include<bits/stdc++.h>using namespace std;#define ll long long#define N 1005int dp[N][3],R[N],G[N],B[N];int main(){    int t;    scanf("%d",&t);    for(int cas=1;cas<=t;cas++)    {        int n;        scanf("%d",&n);        for(int i=1;i<=n;i++)            scanf("%d %d %d",&R[i],&G[i],&B[i]);        memset(dp,0,sizeof(dp));        for(int i=1;i<=n;i++)        {            dp[i][0]=min(dp[i-1][1],dp[i-1][2])+R[i];            dp[i][1]=min(dp[i-1][0],dp[i-1][2])+G[i];            dp[i][2]=min(dp[i-1][0],dp[i-1][1])+B[i];        }        int ans=min(dp[n][0],min(dp[n][1],dp[n][2]));        printf("Case %d: %d\n",cas,ans);    }    return 0;}


0 0