【完全背包】-HDU-2159-FATE
来源:互联网 发布:unity3d navmeshagent 编辑:程序博客网 时间:2024/05/16 00:39
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159
题目描述:
还是背包,和 0-1 背包差不多,给出物品重量、价值,背包容量,求最大价值和,不同的是这次每种物品有无限个,这就叫完全背包。
解题思路:
一开始没什么思路,本来想把一种物品拆成 m / w[ i ] 个相同物品来看,但觉得太麻烦而且又有可能超时,没去尝试,又去看了背包九讲,,没看懂,于是最后参照了别人的公式和代码,发现和 0-1 背包很类似,就是变成了二维数组,多了一层循环,这是很裸的题了,公式就是如下。不过说实话,,仍然想的不是很明白,还要多做几道题。
AC代码:
/* dp[j][t] = max(dp[j][t],dp[j-w[i]][t-1]+v[i]) 表示 用掉了j点的忍耐度,并且杀了t个怪后,所获得的最大经验数。*/#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;int v[120],w[120],dp[120][120];int main(){ int n,m,k,s,i,j,t; while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF) { memset(v,0,sizeof(v)); memset(w,0,sizeof(w)); memset(dp,0,sizeof(dp)); for(i=0;i<k;i++) { scanf("%d%d",&v[i],&w[i]); } for(i=0;i<k;i++) { for(j=w[i];j<=m;j++) { for(t=1;t<=s;t++) dp[j][t]=max(dp[j][t],dp[j-w[i]][t-1]+v[i]); } } int flag=0,ans; for(i=0;i<=m;i++) { if(flag)break; for(j=0;j<=s;j++) { if(dp[i][j]>=n) { flag=1; ans=i; break; } } } if(flag) cout<<m-ans<<endl; else cout<<-1<<endl; } return 0;}
AC截图:
0 0
- 【完全背包】-HDU-2159-FATE
- HDU【2159】FATE--完全背包
- hdu 2159 FATE (完全背包)
- HDU 2159 FATE ,完全背包
- HDU 2159-FATE(完全背包)
- HDU 2159 FATE 完全背包
- hdu 2159 FATE(完全背包)
- HDU-2159 FATE(完全背包)
- HDU 2159 FATE【二维背包+完全背包】
- hdu 2159 FATE(二维背包+完全背包)
- FATE 完全背包 HDU
- FATE hdu 2159 二维的完全背包
- hdu 2159 fate(二维完全背包)
- HDU 2159 FATE(二维完全背包)
- 【hdu 2159】 FATE 二维费用完全背包
- hdu 2159 fate(二维完全背包)
- HDU 2159 FATE (二维费用完全背包)
- hdu 2159 FATE(二维完全背包)
- 使用eclipse开发python
- Fiddler 教程
- Ubuntu 12.04中文输入法的安装
- OJ_1012 畅通工程
- Win7+Ubuntu11.10(EasyBCD硬盘安装)
- 【完全背包】-HDU-2159-FATE
- JavaScript’s call v apply v bind
- 队列与栈_栈结构的应用
- 二叉排序树_求二叉树的高度
- JAVA内存管理
- 入门经典-训练指南5.1 图论基础例题
- filesystems / ramfs-rootfs-initramfs
- 存储过程语法及实例
- 通用菜单_完善功能