HDU 2546 饭卡
来源:互联网 发布:seo盒子破解版 编辑:程序博客网 时间:2024/06/10 12:13
变形的01背包问题,首先他告诉我们,只有有5元,我们就能买东西,他要求我们最后剩下的钱最少,我们就可以换个思路来考虑,最贵的我们一定要买,而且我们要最后再买,我们只需要留下5元钱来支付最贵的商品就可以了。
如果我们的钱不足5元,那么我们就一样菜都买不到,就直接输出钱数就可以了
dp[i]存的是有i元的时候我们的最大花费是多少元
#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;int c[1005];int dp[1005];int cmp(int aa,int bb){ return aa<bb;}int main(){ int n,m; while(~scanf("%d",&n)&&n) { for(int i=0;i<n;i++) scanf("%d",&c[i]); scanf("%d",&m); memset(dp,0,sizeof(dp)); if(m<5) { printf("%d\n",m); continue; } sort(c,c+n,cmp); for(int i=0;i<n-1;i++)//最高只能遍历到n-2,因为最后一个商品我们单独讨论 { for(int j=m-5;j>=c[i];j--)//从m-5开始就是因为我们在总的钱先扣5元出来买最贵的商品 { dp[j]=max(dp[j],dp[j-c[i]]+c[i]); } } printf("%d\n",m-dp[m-5]-c[n-1]);//所有最后还需要减去最贵的菜 }}
其实后来才觉得没有什么难的,最开始做的时候也是感觉理解起来相当的困难,觉得很多地方都不能明白。多练习,多做笔记就好。
0 0
- HDU 2546 饭卡
- HDU 2546 饭卡
- HDU 2546 饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡(背包)
- Hdu 2546 饭卡
- HDU 2546 饭卡
- HDU 2546 饭卡 DP
- hdu 2546 饭卡
- HDU 2546 饭卡
- HDU 2546 饭卡
- HDU-2546-饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡
- 饭卡 hdu 2546
- hdu 2546 饭卡
- 常用icon以及color颜色RGB值和对应颜色效果图
- 12.3 实现一个剪贴板查看器
- 牛客网 | 孩子们的游戏(圆圈中最后剩下的数)
- 第一次使用csdn博客
- cpongo
- HDU 2546 饭卡
- 微软100道算法题-----输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对
- Linux NFS服务器的安装与配置
- iPhone/iOS中保存自定义对象(Custom Object/Custom Class)的数组(NSMutableArray/NSArray)到NSUserDefaults
- json datatime convert
- Android开发 屏幕适配
- Android基础入门教程——10.8 LayoutInflater(布局服务)
- 第二天 Python列表的使用
- Android线程间通信(补充):UI线程