01背包能够取到的值>=m的最小值
2015-04-22 12:19
141 查看
问题如下:
服装店总共有n件衣服,价格分别为P1, P2, …, Pn。店铺开展满500减100活动, 限定顾客每件衣服只能买一件。顾客如何选择衣服搭配最划算(选购衣服价格总和大于500情况下的最小值)。
题意:n件衣服,能够拼出的价值总和>=500 的最小值。
思路:先找到一个可行解cap,把cap 当做背包容量,然后做01背包。
如果金额为小数,cap扩大100倍就好了。
#define N 1005
#define M 10000
/**服装店总共有n件衣服,价格分别为P1, P2, …, Pn。店铺开展满500减100活动, 限定顾客每件衣服只能买一件。顾客如何选择衣服搭配最划算(选购衣服价格总和大于500情况下的最小值)。
*/
int shop
;
int dp[M]={1,0};
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",shop+i);
int cap=0;
//找一个可行解cap
for(int i=0;i<n&&cap<500;i++)cap+=shop[i];
if(cap<500.0){printf("-1\n");return 0;}
//else 找到了一个可行解cap
for(int i=0;i<n;i++)
for(int v=cap;v>=shop[i];v--)
{
dp[v]+=dp[v-shop[i]];
if(dp[v]>0 && v>=500)cap=v;
}
// 输出最小的能够拼成的金额
printf("%d\n",cap);
return 0;
}
/**
6
100 202 300 405 507 101
ans 501
*/
服装店总共有n件衣服,价格分别为P1, P2, …, Pn。店铺开展满500减100活动, 限定顾客每件衣服只能买一件。顾客如何选择衣服搭配最划算(选购衣服价格总和大于500情况下的最小值)。
题意:n件衣服,能够拼出的价值总和>=500 的最小值。
思路:先找到一个可行解cap,把cap 当做背包容量,然后做01背包。
如果金额为小数,cap扩大100倍就好了。
#define N 1005
#define M 10000
/**服装店总共有n件衣服,价格分别为P1, P2, …, Pn。店铺开展满500减100活动, 限定顾客每件衣服只能买一件。顾客如何选择衣服搭配最划算(选购衣服价格总和大于500情况下的最小值)。
*/
int shop
;
int dp[M]={1,0};
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",shop+i);
int cap=0;
//找一个可行解cap
for(int i=0;i<n&&cap<500;i++)cap+=shop[i];
if(cap<500.0){printf("-1\n");return 0;}
//else 找到了一个可行解cap
for(int i=0;i<n;i++)
for(int v=cap;v>=shop[i];v--)
{
dp[v]+=dp[v-shop[i]];
if(dp[v]>0 && v>=500)cap=v;
}
// 输出最小的能够拼成的金额
printf("%d\n",cap);
return 0;
}
/**
6
100 202 300 405 507 101
ans 501
*/
相关文章推荐
- 19 获取给定的数组能够组成的最小的数字
- 最小邮票数 01背包
- 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。
- 九度oj 题目1209:最小邮票数 (01背包)
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- (hdu step 4.2.3)Knight Moves(求从起点是否能够到达终点的最小步数)
- 剑指offer——定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- java实现定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
- 南阳理工ACM 括号匹配问题,并求出使得括号能够匹配需要新增的最小括号数(括号匹配(二))
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- hdu 2295 Radar 重复覆盖 DLX+二分答案 给出一些城市及一些雷达的坐标,要求从这些雷达中选取最多k个能够覆盖所有的城市,问雷达的最小覆盖半径为多少
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 实现一个栈(元素遵守先入后出顺序),能够通过 min 方法在 O(1)时间内获取栈中的最小元素。同时,栈的基本操作:入栈(Push)、出栈(Pop),也是在O(1)时间内完成的
- 给定一个整数,求比该整数大的最小的整数,其数字能够组成一个回文
- 动态规划 01背包 最大子数组和 最小路径 斐波那契数列
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 实现能够返回最小值元素的栈(每日一道算法题)
- 17.定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 【ProjectEuler】ProjectEuler_051(找出最小的能够通过改变同一部分得到八个质数的质数)
- 剑指offer-定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。