现在死亡骑士希望你能帮他计算一下,最少他要给地精商人多少小费.
这里n可以类比背包容量,3,是物品数量,150,200,350是花费的价值,关键在于v[i]怎么求,其实v[i]就是w[i],也就是你花费的价值就是你获得的价值,最后得到dp[n]就是使用所有物品,尽可能使用背包重量所获得的最大价值。
AC代码:
#include <stdio.h> #include <string.h> int w[3]={150,200,350};//w[i]既是花费的代价,也是获得的价值 int dp[10005];//dp[i][j]表示在购买到i件物品,用j块钱所获得的最大价值.最后n-dp[3][n]; int max(int a,int b) { return a>b?a:b; } int main() { int T,i,j,n; scanf("%d",&T); while(T--) { scanf("%d",&n); memset(dp,0,sizeof(dp)); for (i=0;i<=2;i++) for (j=w[i];j<=n;j++) dp[j]=max(dp[j],dp[j-w[i]]+w[i]); printf("%d\n",n-dp[n]); } return 0; }