HDU2660Accepted Necklace

题目大意:给你每个宝石的重量,价值,从中找到k个价值和最大的宝石做成一条项链

解题思路:类似01背包,多了一个变化就是数量有了限制,用搜索处理,这题用递推数组可以过HDU的数据,但是答案却不是正确的,因为递推数组得到的答案可能偏小

AC代码如下:

#include<stdio.h>
#include<string.h>

int value[1010],height[1010],w,k,MAX,n;

int max(int a,int b)
{
	return a>b?a:b;
}

void dfs(int x,int hs,int ks,int vs)
{
	if(hs>w || n-x<k-ks) return ;  // 第二个剪枝挺重要的,如果剩下的东西不够做项链就去掉
	if(ks==k)
	{
		MAX=max(MAX,vs);
		return ;
	}
	dfs(x+1,hs+height[x],ks+1,vs+value[x]);
	dfs(x+1,hs,ks,vs);
	return ;
}

int main()
{
	int i,t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&k);
		for(i=MAX=0;i<n;i++)
			scanf("%d%d",&value[i],&height[i]);
		scanf("%d",&w);
		dfs(0,0,0,0);
		printf("%d\n",MAX);
	}
	return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
05-03 12:45
西南大学 Java
nsnzkv:你这项目写的内容太多了,说实话都是在给自己挖坑,就算简历过了,后面面试也难受
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务