简单的动态规划——装箱问题
2017-12-20 20:25
549 查看
装箱问题
告诉你箱子的容积为多少,告诉你有N件物品和每一件物品的体积,问如何选择物品才能令箱子的剩余容积最小。搜索递归
#include<bits/stdc++.h> using namespace std; int p; int v[40]; int n; int dp(int i,int j) { int ans=j; if(i==0) {ans=j;return ans;} else if(ans<v[i]) ans=dp(i-1,ans); else ans=min(dp(i-1,ans),dp(i-1,ans-v[i])); return ans; } int main() { scanf("%d",&p); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&v[i]); cout<<dp(n,p)<<endl; }
记忆化搜索
#include<bits/stdc++.h> using namespace std; int p; int v[40]; int n; int dp[35][20004]; int rec(int i,int j) { if(dp[i][j]>=0) return dp[i][j]; int ans=j; if(i==0) {return j;} else if(ans<v[i]) ans=rec(i-1,ans); else ans=min(rec(i-1,ans),rec(i-1,ans-v[i])); return dp[i][j]=ans; } int main() { scanf("%d",&p); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&v[i]); memset(dp,-1,sizeof(dp)); cout<<rec(n,p)<<endl; }
动态规划
#include<bits/stdc++.h> using namespace std; int p; int v[40]; int n; int dp[20003]={0}; int rec( ) { for(int i=1;i<=n;i++) for(int j=p;j>=v[i];j--) dp[j]=max(dp[j],dp[j-v[i]]+v[i]); return p-dp[p]; } int main() { scanf("%d",&p); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&v[i]); cout<<rec()<<endl; }
相关文章推荐
- 动态规划简单例子(数塔问题)java
- 删数问题最简单的动态规划
- 杭电acm step 动态规划专题总结(1)简单的动态规划问题
- 算法训练 装箱问题 递归动态规划
- 蓝桥杯 ALGO-21算法训练 装箱问题(动态规划,01背包)
- 动态规划 01背包问题(简单易懂)
- 【初学动态规划】之装箱问题
- 动态规划-------一个简单爬梯子问题
- 动态规划之0-1背包问题(简单易懂)
- 简单的动态规划问题(帮助理解动态规划)
- 一个简单的动态规划问题
- 简单的动态规划问题总览(图)
- 【动态规划入门】装箱问题
- 动态规划——装箱问题
- Alphacode 简单的动态规划问题。
- 简单动态规划问题分析
- 动态规划0——1背包问题
- 动态规划问题系列---Unique Paths II
- HDU 1267(简单的动态规划)
- 【hdu4283】区间动态规划问题