生活随笔
收集整理的這篇文章主要介紹了
收银员
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
.
.
.
.
.
.
分析
完成任務是使所有物品全部買或偷到,而Bob有多少掃描時間便能偷多少物品,所以掃描了某一物品,能帶走的物品便是掃描時間,加上1(也就是你正在掃描的這個物品),在這里可以直接把掃描時間+1,那么現在掃描時間就等價與能帶走的物品個數了。
之后我們將掃描時間看作體積,價格看作價值。那么題目便等價與把背包體積至少裝至n的最小價值,就和01背包一樣了。
.
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
using namespace std;
int n,m=0,t[2001],c[2001];
long long f[5000],ans=1<<30;int main()
{scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%d",&t[i],&c[i]);t[i]++;if (t[i]>m) m=t[i];}m+=n;for(int j=1;j<=m;j++)f[j]=1<<30;f[0]=0;for (int i=1;i<=n;i++)for (int j=m;j>=t[i];j--){f[j]=min(f[j],f[j-t[i]]+c[i]);if (j>=n) ans=min(ans,f[j]);}printf("%d",ans);return 0;
}
轉載于:https://www.cnblogs.com/YYC-0304/p/10292834.html
總結
以上是生活随笔為你收集整理的收银员的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。