hdu2546 01背包 重学背包
来源:互联网 发布:mac队 编辑:程序博客网 时间:2024/06/06 08:09
题意:给出菜的价钱和自己的余额。使自己余额最少,注意余额大于5的情况可以买任意的菜。
思路:小于5的余额不能买菜,直接输出,大于五的余额,留下5元买最贵的菜,剩下的余额进行01背包,将剩下的余额减去01背包消耗金额最大。就得出答案
代码:
#include<iostream>#include<cstdio>using namespace std;int ZeroOnePack( int price[],int money,int n ,int pos) //01背包解法{ int f[1024]={0}; for( int i=1; i<=n ; i++ ) { if(i != pos) for( int j=money ; j>=price[i]; j-- ) { if(f[j]<f[j-price[i]]+price[i] ) f[j]=f[j-price[i]]+price[i]; } } return money-f[money];}int main( ){ int n,money,price[1024]; while( scanf( "%d",&n )==1 && n ) { int max=0,pos; for( int i=1; i<=n; i++) { scanf( "%d" ,&price[i] ); if( max<price[i] ) //记录最贵的菜的下标 { pos=i; max=price[i]; } } scanf( "%d",&money ); if( money>=5 ) printf( "%d\n",ZeroOnePack( price,money-5,n ,pos)-max+5); //需要预留5元买最贵的菜。money-5 else printf( "%d\n",money ); } return 0;}
- hdu2546 01背包 重学背包
- HDU2546 01背包
- HDU2546:饭卡(01背包)
- hdu2546 饭卡 (01背包)
- hdu2546饭卡-01背包
- hdu2546饭卡 (01背包)
- HDU2546:饭卡(01背包)
- HDU2546 饭卡 01背包
- hdu2546 01背包
- HDU2546 (01背包)
- HDU2546 饭卡(01背包)
- HDU2546 01背包
- 【HDU2546】饭卡(01背包)
- 【01背包】HDU2546饭卡
- HDU2546(01背包)
- hdu2546饭卡(01背包)
- hdu2546-01背包
- hdu2546 饭卡(01背包)
- 【操作系统面试专题】:为什么要在操作系统中引入线程?
- 南阳oj-29(求转置矩阵问题)解题报告
- hdu3709——数位dp
- FTPClient下载文件及目录
- 网线接法大全(RJ45型网线插头)
- hdu2546 01背包 重学背包
- 工具栏的显示和隐藏
- 打开RabbitMQ管理界面的注意点
- acmclub 2081 班级聚会上的游戏
- 【操作系统面试专题】:何谓死锁?产生死锁的原因和必要条件是什么?
- 记录一次mysql链接ERROR 2003错误
- uva 748 - Exponentiation 带小数点的大数乘法
- C++中的递归过程
- JDK环境变量配置