POJ 1276 Cash Machine DP(多重背包化01背包)
来源:互联网 发布:可以编写c语言的软件 编辑:程序博客网 时间:2024/06/06 00:37
题意: 现在需要价格总额为cash的钱,有version种面值的钱币,每种钱币的数目为amount,面值为denomination,求解在小于或等于所需价格总额的情况下所能组成的最大价值总和.
题解:每一种货币面值乘以系数1,2,4,...,2^(k-1), amount-2^k+1,且 k 是满足amount-2^k+1>0的最大整数。例如,如果amout为13,就将面值分别乘以系数1,2,4,6的得到四个值。然后将多重背包转化为01背包。
#include <iostream>using namespace std;int dp[100005], c[10001];int main(){int cash, version, denomination, amount;while ( cin >> cash ){int i, j, temp, k = 0;cin >> version;for ( i = 0; i < version; i++ ){cin >> amount >> denomination;j = 1;while ( j <= amount ){c[k] = j * denomination;amount -= j;j = j * 2;k++;}if ( amount > 0 )c[k++] = amount * denomination;}memset ( dp, 0, sizeof(dp) );for ( i = 0; i < k; i++ ){for ( j = cash; j >= c[i]; j-- ){temp = dp[j-c[i]] + c[i];if ( temp > dp[j] )dp[j] = temp;}}cout << dp[cash] << endl;}return 0;}
- POJ 1276 Cash Machine DP(多重背包化01背包)
- 【DP|多重背包】POJ-1276 Cash Machine
- POJ 1276 Cash Machine【多重背包DP】
- POJ 1276 Cash Machine(DP多重背包)
- POJ 1276 Cash Machine (多重背包)
- POJ 1276 Cash Machine (多重背包)
- 【POJ】1276 Cash Machine(多重背包)
- poj 1276 Cash Machine(多重背包)
- poj 1276 Cash Machine(多重背包)
- POJ - 1276 Cash Machine(多重背包)
- POJ 1276 - Cash Machine(多重背包)
- POJ 1276 Cash Machine(多重背包)
- POJ 1276 Cash Machine(多重背包)
- POJ 1276 Cash Machine (多重背包)
- POJ-1276-Cash Machine(多重背包)
- POJ 1276 Cash Machine(多重背包)
- Cash Machine poj 1276(多重背包)
- poj 1276 Cash Machine (多重背包)
- 如何设置linux操作系统以root用户登录?
- Android APN设置及获得手机号
- Python3写的小工具,类似Linux的alias给程序起别名
- Android 判断当前网络 wifi ctwap(cmwap) ctnet(cmnet)
- android WebView使用cmwap无法联网解决办法
- POJ 1276 Cash Machine DP(多重背包化01背包)
- 合并(归并)排序(MergeSort)
- C#加密方法汇总 .
- 09-04 HDU_Steps4.1 二分三分 HDU2199 HDU2899 HDU1967 HDU2141 HDU2298 HDU1597 HDU2438 HDU3400
- 关于沟通成本的问题
- 40种网站设计常用技巧 .
- IPv4的地址真的用光了吗
- mysql重置自增列(自动增长)AUTO_INCREMENT 初时值
- C++中获得CPU高精度时间戳