poj3093
2015-07-20 10:50
267 查看
枚举最终无法选取的最小物品,那么显然比这个物品代价小的物品都必须要选。
对于比这个物品代价大的物品,DP计算方案数即可。
至于物品价值相同的根据排序之后的顺序视为不同就可以了。
设 dp(i,j)dp(i, j) 表示选取i~n个物品,花费j元的方案数,
dp(n+1,0)=1,dp(i,j)=dp(i+1,j)+dp(i+1,j−c[i])dp(n + 1, 0) = 1,dp(i, j) = dp(i + 1, j) + dp(i + 1, j - c[i])
假设此时无法选取的最小物品为 x ,除去必须要选的物品剩余空间为rem
那么此时的方案数为 ∑c[x]−1r=0dp(x+1,rem−r)\sum_{r=0}^{c[x]-1} dp(x+1,rem-r)
把方案数累加起来就是答案啦~另外也要特判。
对于比这个物品代价大的物品,DP计算方案数即可。
至于物品价值相同的根据排序之后的顺序视为不同就可以了。
设 dp(i,j)dp(i, j) 表示选取i~n个物品,花费j元的方案数,
dp(n+1,0)=1,dp(i,j)=dp(i+1,j)+dp(i+1,j−c[i])dp(n + 1, 0) = 1,dp(i, j) = dp(i + 1, j) + dp(i + 1, j - c[i])
假设此时无法选取的最小物品为 x ,除去必须要选的物品剩余空间为rem
那么此时的方案数为 ∑c[x]−1r=0dp(x+1,rem−r)\sum_{r=0}^{c[x]-1} dp(x+1,rem-r)
把方案数累加起来就是答案啦~另外也要特判。
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <vector> #include <utility> #include <stack> #include <queue> #include <iostream> #include <algorithm> const int maxn = 1005, maxd = 1005; int n, d, c[maxn]; long long f[maxd]; long long ans, sum; int main() { int T; #ifndef ONLINE_JUDGE freopen("poj3093.in","r",stdin); freopen("poj3093.out","w",stdout); #endif std::cin >> T; for(int Case = 1; Case <= T; Case++) { std::cout << Case << ' '; std::cin >> n >> d; for(int i = 1; i <= n; i++) scanf("%d",&c[i]); std::sort(c + 1, c + n + 1); memset(f, 0, sizeof(f)); ans = 0, sum = 0, f[0] = 1; for(int i = 1; i <= n; i++) sum += c[i]; for(int i = n; i > 0; i--) { sum -= c[i]; for(int j = std::max(0LL, (long long)d - sum - (c[i] - 1)); j <= d - sum; j++) ans += f[j]; for(int j = d; j >= c[i]; j--) f[j] += f[j - c[i]]; } if(c[1] > d) ans = 0; std::cout << ans << std::endl; } #ifndef ONLINE_JUDGE fclose(stdin); fclose(stdout); #endif return 0; }
相关文章推荐
- Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新
- 【Java基础第一弹】Java序列化基础篇
- poj3093 分类: poj 2015-07-20 10:50 18人阅读 评论(0) 收藏
- (大数据工程师学习路径)第三步 Git Community Book----Git基本用法(上)
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- 辨析 singleton 和 prototype
- 在Extjs中动态增加控件
- spring aop事务配置,事务回滚
- OC的单例模式的实现
- Spring bean加载顺序 depends-on
- 内建变量
- 设计模式_中介者模式
- 【sqlserver】如何添加外键
- C++知识点总结(5)
- C++知识点总结(5)
- 优秀博客地址
- 001--eclipse中的project 、 classpath和settings
- confluence只显示附件,不显示连接的问题--【confluence】
- 2015GitWebRTC编译实录5
- Android应用安全之运行环境检查