hdu 5543 Pick The Sticks 【01背包】
来源:互联网 发布:java并发 多条数据 编辑:程序博客网 时间:2024/06/05 06:18
点击打开链接
题意。给你一个 长度为L 的背包, [0,2000]
再给你n根长度为ai的木棍,其本身价值为vi;
然后只要木棍的重心放进背包就算放进去。问最多不重叠的放置能拿的价值。
题解: 01背包, 重心放进去, 意思就是两端有两个放一半的就行。中间01背包。
那么开一个 dp[i][[j][k]. 代表使用i根木棍 占用j空间,端点有K个需要折半放。
#include<string>#include<vector>#include<queue>#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<set>#define ll long long#define x first#define y second#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;const int mod=11;const int maxn=1111;struct node{ ll w,v;}a[maxn];ll dp[4040][3];int main(){ int t,n,m,ca=1; ll ans; cin>>t; while(t--){ memset(dp,0,sizeof(dp)); cin>>n>>m; m*=2;ans=0; for(int i=1;i<=n;++i){ scanf("%lld %lld",&a[i].w,&a[i].v); a[i].w*=2; ans=max(a[i].v,ans); } for(int i=1;i<=n;++i){ for(int j=m;j>=a[i].w/2;--j){ for(int k=0;k<3;++k){ if(j>=a[i].w) dp[j][k]=max(dp[j][k],dp[j-a[i].w][k]+a[i].v); if(k>0) dp[j][k]=max(dp[j][k],dp[j-a[i].w/2][k-1]+a[i].v); ans=max(ans,dp[j][k]); } } } printf("Case #%d: %lld\n",ca++,ans); }return 0;}
0 0
- hdu 5543 Pick The Sticks 【01背包】
- hdu oj Pick The Sticks(01背包)
- hdu 5543 Pick The Sticks(01背包)
- HDU 5543 Pick The Sticks (DP 01背包)
- hdu 5543 Pick The Sticks(01背包)
- HDU 5543 Pick The Sticks 背包变形 ccpc
- HDU 5543 Pick The Sticks(0-1背包)
- HDU 5543 Pick The Sticks【0-1背包】
- HDU 5543 Pick The Sticks
- hdu 5543 Pick The Sticks
- HDU 5543 Pick The Sticks
- hdu-5543-Pick The Sticks
- HDU5543 Pick The Sticks(01背包)
- Pick The Sticks HDU
- HDU 5543 Pick The Sticks(DP)
- HDU 5543 Pick The Sticks【三维dp】
- 2015 南阳CCPC hdu5543 Pick The Sticks(01背包)
- Pick The Sticks【背包 CCPC D题】
- 集合之HashSet
- Cocos2d-LUA 3.12 + SublimeText 3 开发环境搭建
- 【C语言】scanf返回值问题
- Linux命令简写全称
- paypal_ipn的option_selection1消失的解决方式
- hdu 5543 Pick The Sticks 【01背包】
- JavaScript---数组问题
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- mdev机制(四)————mdev实现U盘或SD卡自动挂载
- reinforce
- Windows PE 第十三章 PE补丁技术
- Centos安装lnmp(php7.0)+mongodb数据库
- 欢迎使用CSDN-markdown编辑器
- 使用Executors创建和管理线程