hdu2546饭卡
来源:互联网 发布:淘宝描述服务物流 编辑:程序博客网 时间:2024/06/03 17:37
dp[i][j]=max{dp[i-1][j],(dp[i-1][j-c[i]]+c[i])}; 对于第i种菜品,剩下j元时,可消费的最大金额(买或不买第i种菜品)
用滚动数组做动态规划处理dp[j]=max(dp[j],(dp[j-c[i]]+c[i])),(j=m-5;j>=c[i];j--)当处理第i种菜品时dp[j],dp[j-c[i]]存储的数据就是dp[i-1][j],dp[i-1][j-c[i]],所以,没必要使用二维数组,可节约程序运行时的内存,每当i改变时,dp[]数组即被更新,最后答案存储在dp[m-5]中
/******************************* * Author:fisty * Data:2014-10-1 * hdu2546 * 01背包 ******************************/#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define MAX_N 1000int n,m;int a[MAX_N];int dp[MAX_N];int main(){ while(scanf("%d", &n) && n){ for(int i = 0;i < n; i++) scanf("%d", &a[i]); scanf("%d", &m); sort(a, a + n); if(m < 5){ printf("%d\n", m); continue; } memset(dp, 0, sizeof(dp)); for(int i = 0;i < n-1; i++){ //最大第n个的留到最后再取 for(int j = m-5; j >= a[i];j--){ //剩下j元时能消费的最大金额 dp[j] = max(dp[j] , dp[j-a[i]]+a[i]); } } printf("%d\n", m - dp[m-5] - a[n-1]); } return 0;}
0 0
- 饭卡 hdu2546
- HDU2546 饭卡
- hdu2546-饭卡
- HDU2546:饭卡
- hdu2546 饭卡
- HDU2546 饭卡
- HDU2546 饭卡
- hdu2546 饭卡
- hdu2546 饭卡
- hdu2546饭卡
- hdu2546饭卡
- 【HDU2546】饭卡
- hdu2546 饭卡
- hdu2546饭卡
- hdu2546 饭卡
- hdu2546饭卡
- hdu2546饭卡
- HDU2546-饭卡
- 【算法】_005_选择排序
- 关于海量数据处理的各种常用数据结构浅谈
- Qt for ios开发:Qt在不同平台下编码问题
- C++内存对象模型
- linux下wc和netstat监控tomcat(web)应用的情况
- hdu2546饭卡
- 网页背景渐变
- 【算法】_006_归并排序
- 从新手运气到幸存者偏差
- 海明码与crc码学习笔记
- java中的接口
- JAVA中一些概念
- 详解Android中AsyncTask的使用
- hdu2099