stick棍子by Ye

这里给一下私藏的题目,棍子,挺难,不分析了,直接贴出代码,不过只有90。TLE超时。

poj上有题目,大家自己看看。

棍子

【问题描述】

一个电视节目正准备一个与观众互动的游戏,游戏的内容是让观众从箱子里抽出若干根棍子,若观众能成功地把抽出来的棍子摆成一个多边形,便可得到一份礼物。

当然,为了做好这个节目,这个游戏也需要精心设计,使得游戏既不会太难而影响现场气氛,也不会太容易而缺乏挑战性。要判断某个设计是否可取,关键要得出观众能成功抽取的方法有多少种,现在你接下了这项工作。

【输入格式】

1行包含一个整数N

2行包含N个用空格隔开的整数ai,为各根棍子的长度。

【输出格式】

输出只有一行,包含一个整数,为取出的棍子能成功摆成一个多边形的方法数。

【样例】

 

stick.in

stick.out

4

3 3 3 4

5

 

【数据范围】 3 3 3 3 3 4 3 3 4 3 3 4 3 3 3 4

30%的数据满足:N10ai100

50%的数据满足:N25ai10000;

100%的数据满足:N50ai200000000

 

#include<stdio.h>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const int MAX_N = 101;
const LL INF=10000000000;
LL N;
LL length[MAX_N];
LL s[MAX_N];
LL ans_0,ans_1;
LL p_0,p_1;
LL init()
{
	int i;
	scanf("%lld",&N);
	for (i=1;i<=N;i++)
	scanf("%lld",&length[i]),s[i]=s[i-1]+length[i];
	sort(length+1,length+N+1);
}
LL put()
{
	if (ans_1)
	{
		printf("%lld",ans_1);
		printf("%010lld",ans_0);
	}
	else
	printf("%lld",ans_0);
}
LL sp(int t)
{
	int i;
	p_0=1;
	p_1=0;
	for (i=1;i<=t;i++)
	p_0*=2,p_1*=2,p_1+=p_0/INF,p_0%=INF;
}
LL dfs(LL t,LL max_length,LL sum)
{
	if (!t)
	{
		if (sum<=max_length)
		{
			ans_0--;
			if (ans_0<0) ans_0+=INF,ans_1--;
		}
		return 0;
	}
	if (sum>max_length) return 0;
	if (sum+s[t]<=max_length) 
	{
		sp(t);
		return 0;
	}
	int i;
	for (i=t-1;i>=0;i--)
	if (sum+length[i]<=max_length)
	dfs(i-1,max_length,sum+length[i]);
}
LL dfs_work()
{
	printf("beginworking\n");
	//sp(N);
	//ans_0+=p_0,ans_1+=p_1,ans_1+=ans_0/INF,ans_0%=INF;
	int i;
	for (i=3;i<=N;i++)
	printf("%dbegin",i),dfs(i,length[i],0),printf("%dend\n",i);
}
int main()
{
	freopen("stick.in","r",stdin);
	freopen("stick.out","w",stdout);
	init();
	dfs_work();
	put();
	return 0;
} 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值