UESTC 1218 Pick The Sticks
来源:互联网 发布:有哪些抢购软件 编辑:程序博客网 时间:2024/05/17 12:22
题意:给出一个长度为L的棍状容器 和n个长度为li价值为vi的棍状物品 物品只能直接放在容器上 且只要重心在容器上即可(包含边界)求能放置的物品的最大的总价值
题解:很容易看出是动态规划的题目,而此题有一个重要的结论,你所选的物品中,可以将长度最长的两个置于两边,这样外延的长度尽量长,肯定是最优的,所以我们先按长度对物品从小到大排序,dp[i][j]表示到第i个木棍总长度为j时能获得的最大价值,这里dp先按常规的背包跑一遍,最后在扫一遍处理下即可。
之后n²的枚举在两端的边是哪两个,中间的值即2端次短的物品对于的dp值。(这里注意奇数时的边界处理 长度为6的容器上可以放一个长度为1的加两个长度为5的物品)
最后特殊考虑下有一个木棍长于总容器的情况即可(即样例4中的情况)。
注意会超int
#include<iostream>#include<cstdio>#include<cstring>#include<cctype>#include<cmath>#include<vector>#include<queue>#include<map>#include<algorithm>#include<set>#define scnaf scanf#define cahr char#define bug puts("=========================");using namespace std;typedef long long ll;const int mod=1000000007;const int maxn=1000+50;struct T{ int l,v; bool operator < (const T &b) const{ return l<b.l; }}a[maxn];ll dp[maxn][2*maxn];int main(){ int T_T,test=1; scanf("%d",&T_T); while(T_T--) { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ scanf("%d%d",&a[i].l,&a[i].v); } sort(a,a+n); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++){ for(int j=0;j<=m;j++) dp[i+1][j]=dp[i][j]; for(int j=0;j+a[i].l<=m;j++) dp[i+1][j+a[i].l]=max(dp[i+1][j+a[i].l],dp[i][j]+a[i].v); } for(int i=0;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j]=max(dp[i][j],dp[i][j-1]); ll ans=a[n-1].v; ans=max(ans,dp[n][m]); for(int i=n-1;i>=0;i--) { int len=m-(a[i].l+1)/2; if(len<0) continue; ans=max(ans,dp[i][len]+a[i].v); for(int j=i-1;j>=0;j--){ len=m-(a[i].l+a[j].l+1)/2; if(len<0) continue; ans=max(ans,dp[j][len]+a[i].v+a[j].v); } } printf("Case #%d: %lld\n",test++,ans); } return 0;}
0 0
- UESTC 1218 Pick The Sticks
- UESTC 1218 Pick The Sticks
- Pick The Sticks UESTC
- UESTC 1218 Pick The Sticks (dp )
- UESTC 1218 Pick The Sticks (2015 CCPC)
- UESTC Pick The Sticks (背包变形)
- HDU5543-Pick The Sticks
- Pick The Sticks HDU
- HDU 5543 Pick The Sticks
- hdu 5543 Pick The Sticks
- HDU 5543 Pick The Sticks
- hdu-5543-Pick The Sticks
- Pick The Sticks【背包 CCPC D题】
- 南阳ccpc D题 Pick The Sticks
- hdu5544 Pick The Sticks(dp)
- HDU 5543 Pick The Sticks(DP)
- hdu 5543 Pick The Sticks 【01背包】
- hdu oj Pick The Sticks(01背包)
- 使用IntelRealScene设备结合Cocos引擎实现体感游戏开发
- TreeView CheckBox勾选联动
- 【免费咨询】 Cloudera Hadoop大数据培训:管理员、开发者、数据分析
- 获取apk文件上的精美图片素材
- iOS socket udp 广播
- UESTC 1218 Pick The Sticks
- Java编程思想小笔记
- FUSE用户态文件系统中自己实现的highlevel接口函数从注册到调用完全追踪
- Xcode 7:Storyboard Reference、Strong IBOutlet以及Scene Dock
- Mybatis 注入全局参数
- Just For Fun:智力题【2】
- 破解文件缓存不更新问题
- Android网络数据传输之网络协议
- MFC笔记之---win32 SDK