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; }