TYVJ 1211 跳舞家怀特先生(DP)

来源:互联网 发布:mac系统 怎么看文件夹 编辑:程序博客网 时间:2024/05/01 21:31

连接:http://new.tyvj.cn/Problem_Show.aspx?id=1211

思路:dp[k][i][j]  表示第k步,第一只脚在i点,第二只脚在j点。。一次只能变一只脚。。

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <stack>using namespace std;const int INF = 0x3f3f3f3f;int dp[10009][5][5];int oor(int a,int b){    if(a==0) return 2;    if(a==b) return 1;    if((a+b)&1) return 3;    else return 4;}int main(){    freopen("in.txt","r",stdin);    int n,t;    scanf("%d",&n);    memset(dp,INF,sizeof(dp));    dp[0][0][0]=0;    for(int k=1;k<=n;k++)    {        scanf("%d",&t);        for(int i=0;i<5;i++)        for(int j=0;j<5;j++)        dp[k][i][t] = min(dp[k-1][i][j]+oor(j,t),dp[k][i][t]);        for(int i=0;i<5;i++)        for(int j=0;j<5;j++)        dp[k][t][j] = min(dp[k-1][i][j]+oor(i,t),dp[k][t][j]);    }    int ans=INF;    for(int i=0;i<5;i++)    for(int j=0;j<5;j++)    ans=min(ans,dp[n][i][j]);    printf("%d\n",ans);    return 0;}



原创粉丝点击