nyoj 1091 还是01背包
来源:互联网 发布:中文域名交易平台 编辑:程序博客网 时间:2024/06/05 18:34
先说一下做这道题的感悟,之前把nyoj背包题A的只剩这道题,一看这道题w,v限制那么大,用背包肯定不行,一看n<=40,果断深搜,交了一发,TLE,嗯嗯,的确,自己写了几组数据,当n=20的时候还阔以秒出答案,当n=25的时候会卡一下,当n=30的时候,愣了好几秒还没出,当n=40的时候,根本出不来,百度了一下,说是要折半枚举,看起来好麻烦的样子,看了下运行结果ac的人,基本上全是0ms,4ms,惊呆了。。。。看了讨论区才知道,原来深搜的时候,可以判断下剩下的能否全部装下,若能的话,就将剩下的全部装进去,自己小改了一发,一交果断ac,4ms,后台真水~~估计后台是全部都能装下,不过也算优化了。
代码贴上:
01.
#include<stdio.h>
02.
#define max(a,b) a>b?a:b
03.
long
long
w[50],v[50],s=0,n,m,shengw[50],shengv[50];
04.
void
dfs(
int
ci,
long
long
zongw,
long
long
zongv )
05.
{
06.
int
i,f=0;
07.
if
(zongw+shengw[n-1]-shengw[ci-1]<=m)
08.
zongv+=shengv[n-1]-shengv[ci-1],f=1;
09.
if
(zongw<=m)
10.
s=max(s,zongv);
11.
if
(!f)
12.
for
(i=ci; i<n; i++)
13.
{
14.
zongv+=v[i];
15.
zongw+=w[i];
16.
dfs(i+1,zongw,zongv);
17.
zongv-=v[i];
18.
zongw-=w[i];
19.
}
20.
}
21.
int
main()
22.
{
23.
while
(
scanf
(
"%lld%lld"
,&n,&m)!=EOF)
24.
{
25.
int
i;
26.
for
(i=0; i<n; i++)
27.
scanf
(
"%lld%lld"
,&w[i],&v[i]);
28.
shengw[0]=w[0],shengv[0]=v[0];
29.
for
(i=1; i<n; i++)
30.
shengw[i]=shengw[i-1]+w[i],shengv[i]=shengv[i-1]+v[i];
31.
s=0;
32.
dfs(0,0,0);
33.
printf
(
"%lld\n"
,s);
34.
}
35.
}
1 0
- nyoj 1091 还是01背包
- NYOJ 1091 还是01背包
- NYOJ 还是01背包(枚举+二分)
- NYOJ 题目1091 还是01背包(二分,超大01背包)
- nyoj 苹果 01背包
- 01背包问题 NYOJ苹果
- nyoj 289 苹果 【01-背包】
- NYOJ 289 苹果(01背包)
- nyoj 又见01背包
- nyoj 又见01背包
- nyoj 289苹果 01背包
- nyoj苹果01背包问题
- NYOJ又见01背包
- NYOJ 289 苹果(01背包)
- POJ 3624 还是01背包
- NYOJ - 苹果(dp-01背包问题)
- NYOJ-289 苹果 289 AC(01背包)
- NYOJ 860 又见01背包
- STM32系列第21篇--DMA
- HDU 3068:最长回文【回文字符串】
- SDOI2016 Round 1解题报告
- 第7周-项目2-友元类
- myeclipse编码问题
- nyoj 1091 还是01背包
- ios修改导航栏的title的文字颜色
- unity图片打成图集后图片变模糊
- 一个简单的http服务器的实现 含源代码
- Tyvj_P1007
- 字符串全排列
- 62. Unique Paths
- 151. Reverse Words in a String
- 创建一个ActionSheet