POJ1260 Pearls(多重捆绑成0-1背包)
来源:互联网 发布:苹果怎么清理淘宝缓存 编辑:程序博客网 时间:2024/05/10 02:05
该怎样去思考?
1)有n种物品,
2)每选一种都要多加上10件,
3)每种物品有件数要求,也可选价格更高的代替,
问:求最少的耗费
如果暂时忽略掉条件2)3)的价格替换;那么装化为多重背包问题?
1.背包问题:
1)容量为总个数,且必须装满;
2)每件物品权值均为1;
2.从具体问题分析:主要是在选和不选上浪费那10个额外的物品的钱,如果没有这个条件的话,那当然是尽量选钱数少的,也就是优先选满钱数少的,但现在有了这个条件,主要分有还是没有这个额外的钱数,也就是选和不选的问题,也就是把每种物品总个数捆绑成一个总物体代替,转化成0-1背包问题
由于一旦某处选了,则之前的必然全部选完,所以只需每次枚举上一次的选择点,取最优值即可,O(n^2)
【源程序】
#include <cstdio>#include <cstring>#define Max(a,b) (a)>(b)?(a):(b)#define Min(a,b) (a)<(b)?(a):(b)#define INF 1000000int dp[1001],Cost[1001],Count[1001],Count1[1001];int main(){//freopen("iofile\\input.txt","r",stdin);int T,n,i,j,k;scanf("%d",&T);while(T--){scanf("%d",&n);Count1[0]=0;for(i=1;i<=n;i++){scanf("%d%d",&Count[i],&Cost[i]);Count1[i] = Count1[i-1] + Count[i];}memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){dp[i]=(Count1[i]+10)*Cost[i];for(j=0;j<i;j++){dp[i]=Min(dp[i],dp[j]+(Count1[i]-Count1[j]+10)*Cost[i]);}}printf("%d\n",dp[n]);}return 0;}
- POJ1260 Pearls(多重捆绑成0-1背包)
- POJ1260--Pearls
- poj1260 Pearls
- poj1260 Pearls
- POJ1260 Pearls
- poj1260 pearls
- poj1260 Pearls
- poj1260 Pearls
- poj1260 Pearls
- POJ1260 Pearls
- POJ1260 Pearls DP
- POJ1260——Pearls
- POJ1260 Pearls Dynamic Programming
- Pearls poj1260 (DP)
- POJ1260 Pearls 解题报告
- poj1260 Pearls (dp)
- POJ1260 Pearls(DP)
- poj1260 Pearls(Dp)
- UISearchBar背景透明,去掉背景,自定义背景(转)
- sgu - 519 - 3D City Model
- 一起学WCF【3】
- 用递归计算阶乘
- Tri_integral Summer Training 6
- POJ1260 Pearls(多重捆绑成0-1背包)
- (step 3.1.5)hdu 2050(折线分割平面)
- 13-mysql中的命令
- 错位字符串
- struts2学习(7)——常量的配置
- POJ1159 Palindrome(最大回文串长度)
- HDU 4602 FFT 终于大致会用FFT了。。
- GridView,repeater整理
- 内部类