cf105 E. Porcelain 背包dp
来源:互联网 发布:怎么分析数据 编辑:程序博客网 时间:2024/06/03 12:20
点击打开链接
题意:
有n排花盆,每排有k个,然后有个人想扔m个花瓶,每个花瓶有个价值val
他只能选择每一排的最左边或者最右边扔
求扔的最大价值
思路: bag[i][j]表示第i排扔j个的最大价值, dp[i][j]表示前i排扔j个的最大价值,背包dp
转移:dp[i][j] = max(dp[i][j],dp[i-1][j-k]+bag[i][k]) 0<=k<=t[i];
代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 105;int n,m,t[maxn],a[maxn][maxn],bag[maxn][maxn];int dp[maxn][10001];int main(){cin >> n >> m;for(int i=1; i<=n; i++){cin >> t[i];for(int j=1; j<=t[i]; j++){cin >> a[i][j];a[i][j] += a[i][j-1];}}for(int i=1; i<=n; i++)for(int j=1; j<=t[i]; j++)for(int k=0; k<=t[i] && k<=j; k++)bag[i][j] = max(bag[i][j], a[i][j-k] + a[i][t[i]] - a[i][t[i]-k]);for(int i=1; i<=n; i++)for(int j=0; j<=m; j++)for(int k=0; k<=t[i] && k<=j; k++)dp[i][j] = max(dp[i][j],dp[i-1][j-k]+bag[i][k]);cout << dp[n][m] << endl;}
0 0
- cf105 E. Porcelain 背包dp
- Codeforces 148E Porcelain [预处理+dp背包]
- CodeForces 148E Porcelain dp+背包(水
- codeforces 148E Porcelain(DP, 分组背包)
- CodeForces 148E Porcelain(dp+背包)
- codeforces 148E Porcelain (dp)
- codeforces-148E-Porcelain【DP】
- Codeforces 148 E Porcelain【dp】
- Codeforces 148 E Porcelain dp
- Codeforces Round #105 (Div. 2) E. Porcelain —— DP(背包问题)
- codeforces 148E Porcelain 多重背包
- Codeforces 148E. Porcelain【多重背包】
- Codeforces 148E Porcelain (dp)
- Codeforces Round #105 (Div. 2)--E. Porcelain 01背包
- Codeforces 148E Porcelain (预处理+多重背包)
- Codeforces 148E(Porcelain)
- Codeforces 148E. Porcelain
- CodeForces 148E Porcelain
- 【LeetCode】513. Find Bottom Left Tree Value【M】【73】
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- 【ACM】Solution of UVA 213-Message Decoding
- Rxjava_自己实现Rxjava map转换及源码分析
- Java中的位运算
- cf105 E. Porcelain 背包dp
- AngularJS开发指南14:依赖注入
- 数据库触发器简单解析
- Windows下echo内容包括>的解决办法
- unity 優化總結
- View的工作原理(二)----View的工作流程
- 简单vim配置
- javascript 小彩蛋
- 生成可重集的序列