개구리 다리 건너기-dp 출력 경로

1170 단어
이 문제 dp도 됐고 출력 경로도 있어야 돼요. 처음 해봐요.
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define INF 0x3f3f3f3f

using namespace std;

const int maxn=150000+10;
int n;
int arr[maxn],dp[maxn],Next[maxn],f[maxn];
vector vt;

int main()
{
    scanf("%d",&n);
    memset(arr,0,sizeof(arr));
    memset(dp,INF,sizeof(dp));
    memset(Next,0,sizeof(Next));
    for(int i=0; i<=n; i++)
        scanf("%d",&arr[i]);
    dp[n+1]=0;//    
    dp[n-1]=arr[n-1];
    dp[n-2]=arr[n-2];
    dp[n]=arr[n];
    for(int i=n-3; i>=0; i--)
    {
        for(int j=3;j>=1;j--)
        {
            if(dp[i]>=dp[i+j]+arr[i])
            {
                dp[i]=dp[i+j]+arr[i];
                Next[i]=i+j;//               
            }
        }
    }
    printf("%d
0",dp[0]); for(int i=Next[0];i;i=Next[i])// printf(" %d",i); printf("
"); return 0; }

좋은 웹페이지 즐겨찾기