【DP】tyvj P1211 - 跳舞家怀特先生

来源:互联网 发布:java class getfields 编辑:程序博客网 时间:2024/05/01 23:45

题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1211

分析:

动态规划 

参见大神博客:http://www.cnblogs.com/xjyh/archive/2012/05/19/2508708.html

递推公式为DP[x,y,i]=MIN(DP[x,rc[i],i+1]+w[y,rc[i]],DP[rc[i],y,i+1]+w[x,rc[i]]);

代码:

#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;int n,a[10001],w[5][5],i,j,k; int dp[5][5][10002];int main(){memset(dp,10000,sizeof(dp));    for(i=0;i<5;i++)    {        w[i][i]=1;        if(i!=0)w[0][i]=2;    }    w[1][2]=w[2][1]=w[1][4]=w[4][1]=w[3][2]=w[2][3]=w[3][4]=w[4][3]=3;    w[1][3]=w[3][1]=w[2][4]=w[4][2]=4;cin>>n;    for (int i=1;i<=n;i++) cin>>a[i];    for(int i=0;i<5;i++)        for(int j=0;j<5;j++)          dp[i][j][n+1]=0;    for (int i=n;i>0;i--)      for (int j=0;j<=4;j++)       for (int k=0;k<=4;k++)  {      dp[j][k][i]=min(dp[j][a[i]][i+1]+w[k][a[i]],  dp[a[i]][k][i+1]+w[j][a[i]]);     }    cout<<dp[0][0][1];   return 0;}


原创粉丝点击