hdoj-1114 (背包dp)

时间:2023-03-09 18:39:26
hdoj-1114 (背包dp)

题目链接

  题意:已知n种coin的价值和体积  求装满容量为v背包的最小硬币价值

 #include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int INF=0x3f3f3f3f;
int dp[][];//前i个元素将j装满的最小价值
int p[],w[];
int n,v;
int main ()
{
int T; scanf ("%d",&T);
while (T--) {
memset (dp,0x3f,sizeof(dp));
dp[][]=;
int v1,v2; scanf ("%d %d",&v1,&v2);
v=v2-v1;
scanf ("%d",&n);
for (int i=;i<=n;i++)
scanf ("%d %d",&p[i],&w[i]);
for (int i=;i<=n;i++)
for (int j=;j<=v;j++) {
dp[i][j]=dp[i-][j];
if (j>=w[i])
dp[i][j]=min (dp[i][j],dp[i][j-w[i]]+p[i]);
}
if (dp[n][v]==INF) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[n][v]);
}
return ;
}