HUD 1248 寒冰王座 DP

这是一道赤裸裸的简单的完全背包,在HDU 2602中我说过在01背包优化的算法中提醒要注意v V--0,而不是0--V ,其实反过来就是完全背包;

这个算法使用一维数组,先看伪代码:

for i=1..N

    for v=0..V

        f[v]=max{f[v],f[v-cost]+weight}

你会发现,这个伪代码与P01的伪代码只有v的循环次序不同而已。这里还是要啰嗦一下,

#include<stdio.h>
#include<stdlib.h>
int a[3]={ 150,200,350 };
int DP( int money )
{
     int f[10024]={ 0 };
     for( int i=0;i<=2; i++ )
     {
         for( int j=0;j<=money; j++ )
              if( j>=a[i]&&f[j-a[i]]+a[i]>f[j] )
                   f[j]=f[j-a[i]]+a[i];     
     }
     return money-f[money];    
}
int main()
{
   int n,money;
   scanf( "%d",&n );
   for( int i=0; i<n; i++ )
   {
       scanf( "%d",&money );
       printf( "%d\n",DP(money) );     
   }
   return 0;    
}

  

 

posted @ 2011-08-05 11:20  wutaoKeen  阅读(181)  评论(0)    收藏  举报