HDU 2546 饭卡

http://acm.hdu.edu.cn/showproblem.php?pid=2546

01背包,开始内层循环写成v>=0无限wa。。。一定要注意数组越界的问题、、、

View Code
#include <iostream>

using namespace std ;

int main()

{

    int n;

    while(scanf("%d",&n),n)

    {

        int w[1010];

        int maxx=0;

        int flag;

        for(int i=1;i<=n;i++)

        {

            scanf("%d",&w[i]);

            if(maxx<w[i]){

                maxx=w[i];

                flag=i;

            }

        }

        int m;

        scanf("%d",&m);

        if(m<5)

            printf("%d\n",m);

        else

        {

            int f[1010];

            memset(f,0,sizeof(f));

            for(int i=1;i<=n;i++)

            {

                if(i==flag)continue;

                for(int v=m-5;v>=w[i];v--)

                    f[v]=max(f[v],f[v-w[i]]+w[i]);

            }

            printf("%d\n",m-f[m-5]-maxx);

        }

    }

    return 0;

}

 

你可能感兴趣的:(HDU)