【传送门:BZOJ1618】
简要题意:
有n个商店,要买h磅的食物
每个商店给出p[i],c[i],表示第i个商店每一次买就会使用c[i]的费用,并得到p[i]磅食物
求出买h磅或以上的最小费用
题解:
DP(完全背包)
设f[i]为买i磅食物的最小费用,直接做就行了,水题
参考代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> using namespace std; typedef long long LL; LL f[61000]; int p[110];LL c[210]; int main() { int n,h; scanf("%d%d",&n,&h); for(int i=1;i<=n;i++) scanf("%d%lld",&p[i],&c[i]); memset(f,63,sizeof(f)); LL ans=999999999; f[0]=0; for(int i=1;i<=n;i++) { for(int j=0;j<=h;j++) { f[j+p[i]]=min(f[j+p[i]],f[j]+c[i]); if(j+p[i]>=h) ans=min(ans,f[j+p[i]]); } } printf("%lld\n",ans); return 0; }