dp入门题,基础中的基础,感觉Light OJ 上的题选的挺好的,循序渐进。
直接上代码吧。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int h[22][3],dp[22][3];
int main()
{
int T,n,i,j,t;
cin>>T;
for(t=1;t<=T;t++)
{
cin>>n;
for(i=1;i<=n;i++)
cin>>h[i][0]>>h[i][1]>>h[i][2];
memset(dp,0,sizeof(dp));
for(i=0;i<3;i++)
dp[1][i]=h[1][i];
for(i=2;i<=n;i++)
for(j=0;j<3;j++)
dp[i][j]+=min(dp[i-1][(j+1)%3],dp[i-1][(j+2)%3])+h[i][j];
int ans;
ans=min(dp[n][0],min(dp[n][1],dp[n][2]));
printf("Case %d: %d\n",t,ans);
}
return 0;
}