UVA - 624 CD

来源:互联网 发布:淘宝消息管理器在哪里 编辑:程序博客网 时间:2024/04/29 15:05

01背包,注意长度要足够大,另外可能有多种答案

#include<cstdio>#include<cstring>#include<algorithm>#define MAX 25#define L 11000using namespace std;int s[MAX],dp[MAX][L],father[MAX][L];void print(int index,int all){    if(index<=0)        return ;    print(index-1,father[index][all]);    if(dp[index][all]>dp[index-1][father[index][all]])        printf("%d ",s[index]);    return ;}int main(){    int l,n,i,j;    while(scanf("%d",&l)!=EOF)    {        scanf("%d",&n);        for(i=1;i<=n;i++)            scanf("%d",&s[i]);        memset(dp,0,MAX*L*4);        for(i=1;i<=n;i++)        {            for(j=0;j<=l;j++)            {                if(j>=s[i])                {                    if(dp[i-1][j]<dp[i-1][j-s[i]]+s[i])                    {                        dp[i][j]=dp[i-1][j-s[i]]+s[i];                        father[i][j]=j-s[i];                    }                    else                    {                        dp[i][j]=dp[i-1][j];                        father[i][j]=j;                    }                }                else                {                    dp[i][j]=dp[i-1][j];                    father[i][j]=j;                }            }        }        print(n,l);        printf("sum:%d\n",dp[n][l]);    }    return 0;}


0 0
原创粉丝点击