POJ 2184 Cow Exhibition(背包)
2024-10-19 20:04:01
希望Total Smart和Totol Funess都尽量大,两者之间的关系是鱼和熊掌。这种矛盾和背包的容量和价值相似。
dp[第i只牛][j = 当前TotS] = 最大的TotF。
dp[i][j] = max(dp[i-1][j-s[i]])。
滚动数组根据j-s[i]和j大小关系决定递推顺序。
中间的j或者TF都可以为负,把j都加上下界的绝对值bound变成正数,最后再减掉就好。
对于s[i]和f[i]取值特殊的可以直接贪心
(1e8跑起来并不虚
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
//#include<bits/stdc++.h>
using namespace std; const int maxn = 1e3+, maxs = 2e5, bound = 1e5;
int s[maxn], f[maxn];
int dp[maxs+]; //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int n, c = ; cin>>n;
int TS = , TF = ;
for(int i = n; i--;){
scanf("%d%d",s+c,f+c);
if(s[c]> && f[c]>){
TS += s[c];
TF += f[c];
continue;
}
if(s[c]<= && f[c] <=) continue;
c++;
}
memset(dp,0xc0,sizeof(dp));
dp[bound] = ;
for(int i = c; i--;){
if(s[i]>){
for(int j = maxs; j >= s[i]; j--){
dp[j] = max(dp[j],dp[j-s[i]] + f[i]);
}
}
else {
for(int j = ; j-s[i] <= maxs; j++){
dp[j] = max(dp[j],dp[j-s[i]] + f[i]);
}
}
}
int ans = bound;
for(int i = bound; i <= maxs; i++){
if(dp[i]+TF>=) ans = max(i+dp[i],ans);
}
printf("%d\n",ans-bound+TS+TF);
return ;
}
最新文章
- C++:为什么说 goto 没有用
- SQL,根据不同条件拼接不同SQL,非if拼接 改为SQL where形式
- FFMpeg 滤镜中英文对照
- JS几种数组遍历方式以及性能分析对比
- Java中final、finally、finalize的区别
- O(1)时间删除链表节点
- ENode框架初始化
- 【codevs 1911 孤岛营救问题】
- batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)
- v-charts 和 websocket实现数据展示动态推送
- 升级到 Android Studio 3.0 + Gradle 4.1 遇到的一些坑及解决方案
- 2013年蓝桥杯省赛C/C++A组真题解析
- zzw原创_非root用户启动apache的问题解决(非root用户启动apache的1024以下端口)
- spring源码学习1
- C++ for循环与迭代器
- 手动安裝TMG2010所需Windows服务和功能
- mongo长连接
- Oracle学习笔记:decode函数
- Effective C++ —— 继承与面向对象设计(六)
- 【单调队列】【P3957】 跳房子
热门文章
- ARC085E(最小割规划【最大流】,Dinic当前弧优化)
- CodeForces 118C 【模拟】
- MongoDB的安装避坑(踩坑)
- GoWeb开发_Iris框架讲解(三):路由功能处理方式
- ASP.NET对象
- AT2301 Solitaire
- PAT甲级——1101 Quick Sort (快速排序)
- 使用JMeter进行API功能测试
- BZOJ 4165 矩阵 堆
- javascript 返回上一页面:onclick=";javascript:history.back(-1);";