1618: [Usaco2008 Nov]Buying Hay 购买干草
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1196 Solved: 622
[ Submit][ Status][ Discuss]
Description
约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草,他知道N(1≤N≤100)个干草公司,现在用1到
N给它们编号。第i个公司卖的干草包重量为Pi(1≤Pi≤5000)磅,需要的开销为Ci(l≤Ci≤5000)美元.每个干草公
司的货源都十分充足,可以卖出无限多的干草包. 帮助约翰找到最小的开销来满足需要,即采购到至少H磅干草
Input
第1行输入N和H,之后N行每行输入一个Pi和Ci.
Output
最小的开销.
Sample Input
2 15
3 2
5 3
Sample Output
9
一眼看过去还以为是bzoj 1606,结果发现只是题目名字一样而已
完全背包,注意细节就好
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LL long long
typedef struct
{
LL p;
LL val;
}Res;
Res s[105];
LL dp[55005];
int main(void)
{
LL n, V, i, j, ans;
while(scanf("%lld%lld", &n, &V)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%lld%lld", &s[i].val, &s[i].p);
memset(dp, 61, sizeof(dp));
dp[0] = 0;
for(i=1;i<=n;i++)
{
for(j=s[i].val;j<=V+5000;j++)
dp[j] = min(dp[j], dp[j-s[i].val]+s[i].p);
}
ans = 1ll<<50;
for(i=V;i<=V+5000;i++)
ans = min(ans, dp[i]);
printf("%lld\n", ans);
}
return 0;
}