0/1 가방 기록 경로

3247 단어 dp 테마
code:
#include 
#include 
int main()
{
    int x,y;
    scanf("%d%d",&x,&y);
    int w[50];
    int val[50];
    int dp[50][50];
    memset (dp,0,sizeof(dp));
    for(int i=1;i<=y;i++)
    {
        scanf("%d%d",&w[i],&val[i]);
    }

    int mark[50][50];
    memset(mark,0,sizeof(mark));
    for(int i=1;i<=y;i++)
        for(int j=x;j>=0;j--)
        {
            dp[i][j]=dp[i-1][j];
            if(j-w[i]>=0&&dp[i][j]1][j-w[i]]+val[i])
            {
                 dp[i][j]=dp[i-1][j-w[i]]+val[i];
                 mark[i][j]=i;
            }
        }
    int max=x;
    for(int i=x;i>=0;i--)
    {
         if(dp[y][i]>=dp[y][max])
             max=i;
    }

    printf("%d
"
,dp[y][max]); int path[50]; int q=1; for(q=y;q>=1;q--) { path[q]=mark[q][max]; max=max-w[mark[q][max]]; } for(int i=1;i<=y;i++) if(path[i]!=0) printf("1
"
); else printf("0
"
); return 0; }

좋은 웹페이지 즐겨찾기