博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 11137 - Ingenuous Cubrency
阅读量:5118 次
发布时间:2019-06-13

本文共 793 字,大约阅读时间需要 2 分钟。

这道题想错了方向,一直纠结于背包运行过程中忽略了一些情况,比如:要选8这个物品,当体积是8的时候我选了一个,因为存在价值为1这样的物品,这就是一种情况,但是当容量是16的时候,因为是完全背包,我又要选一个8,也就是覆盖了前面的f[8],因此我怎样去记录最终组合的种数呢?比如我给的容量就是16:那么会有两种情况8×1+1×8,2×8;但实现起来却是很不容易;

换个思路:我们设f[i]表示组成i面值的种数,则f[j] = f[j] + f[j-w[i]];相当于如果当前值j>w[i]的话,我们就选这个面值,因为有面值一的存在,必成立,又多了f[j-w[i]]种情况。

#include
#include
#define MAXN 10000 + 10long long f[MAXN];int n, w[22];void solve(){ memset(f,0,sizeof(f)); f[0]= 1; for(int i = 1; i < 22; i ++) w[i] = i * i * i; for(int i = 1; i < 22; i ++) { for(int j = w[i]; j <= 10000; j ++) { f[j] += f[j-w[i]]; } }}int main(){ solve(); while(~scanf("%d",&n)) printf("%lld\n",f[n]); return 0;}

转载于:https://www.cnblogs.com/yuzhaoxin/archive/2012/05/07/2488217.html

你可能感兴趣的文章
jQuery on(),live(),trigger()
查看>>
卡尔曼滤波的原理说明
查看>>
对Kalman(卡尔曼)滤波器的理解@@zz
查看>>
局部敏感哈希(Locality-Sensitive Hashing, LSH)
查看>>
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>
[WinAPI] API 2 [MessageBox API][消息框API]
查看>>
BZOJ 1264 动态规划 + 树状数组
查看>>
[BZOJ5248] 2018九省联考 D1T1 一双木棋 | 博弈论 状压DP
查看>>
super 小记
查看>>
C语言实现<读取>和<写入> *.ini文件(转)
查看>>
【架构】Linux的架构(architecture)
查看>>
从解决Cocos2dx-2.x arm64 Crash 来看C的奇技淫巧
查看>>
ASM 图解
查看>>
uva 10721 - Bar Codes(dp)
查看>>
推介一个学习JAVA的系列教程-狗鱼IT教程
查看>>
Python 字典与集合
查看>>
php头函数和浏览器缓存
查看>>
java基础—面向对象
查看>>
【Java】判断IP是否内网(使用正则表达式)
查看>>