Coins 多重背包 HDU
来源:互联网 发布:什么是行知教育 编辑:程序博客网 时间:2024/06/05 23:01
题意:
询问给定的硬币 可以构成 1~v里多少个钱数
思路:
裸多重
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int maxn=100005;int dp[maxn];int num[maxn];int val[maxn];int n,v;void zeroOne(int cost,int worth){ for(int i=v;i>=cost;i--) dp[i]=max(dp[i],dp[i-cost]+worth);}void complete(int cost ,int worth){ for(int i=cost;i<=v;i++) dp[i]=max(dp[i],dp[i-cost]+worth);}void multi(int cost ,int worth,int cnt){ if(v<=cost*cnt) { complete(cost,worth); } else { int k=1; while(k<=cnt) { zeroOne(k*cost,k*worth); cnt-=k; k*=2; } zeroOne(cnt*cost,cnt*worth); }}int main(){ while(~scanf("%d%d",&n,&v)) { if(n==0&&v==0)break; for(int i=1;i<=n;i++) scanf("%d",&val[i]); for(int i=1;i<=n;i++) scanf("%d",&num[i]); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { multi(val[i],val[i],num[i]); } int ans=0; for(int i=1;i<=v;i++) if(dp[i]==i) ans++; printf("%d\n",ans); }}
0 0
- Coins 多重背包 HDU
- hdu 2844 Coins 多重背包
- hdu 2844 Coins 多重背包
- HDU 2844 Coins -- 多重背包
- hdu 2844 Coins - 多重背包
- hdu 2844 Coins(多重背包)
- hdu 2844 Coins 多重背包
- HDU Coins 【多重背包问题】
- Coins hdu 多重背包 2844
- hdu-Coins(多重背包)
- HDU 2844 Coins 多重背包
- HDU-2844-Coins(多重背包)
- HDU 2844 Coins(多重背包)
- HDU 2844:Coins(多重背包)
- HDU 2844(Coins)多重背包
- hdu 2844 Coins (多重背包)
- HDU - 2844 Coins(多重背包)
- HDU 2844 Coins 多重背包
- MD5加密算法工具类
- Android-json解析(一):Gson的使用
- 服务器部署、配置tomcat
- 【GDOI 2017 day1】取石子游戏
- web杂记
- Coins 多重背包 HDU
- zookeeper源码学习系列之一
- C# ComboBox的赋值
- KD-Tree学习小记
- 多态弊端与强制类型转换
- Vue keep-alive
- 详细介绍Android开发集成微信支付(完整版本)
- ffmpeg基本命令
- sina_php_学习规划