Poj 1011 解题报告

来源:互联网 发布:sqlyog怎么导入数据库 编辑:程序博客网 时间:2024/05/19 21:59

? ?? 这是一道经典的搜索题,我个人的理解是双重深度搜索:第一层搜索为搜索当前最短木棍的合法性(len),即在题目所给出的木棍长度中是否能组合出当前木棍的长度,第二层搜索是建立在第一层搜索的基础上,搜索当前最短木棍数目的合法性,即假设我们能从所给的木棍长度中组合出当前最短木棍长度,记当前木棍数为t,则t+=1,同时标记那些已经用来组合当前最短木棍的木棍为“用过”,继续在没用过的木棍中搜索是否能组合另一根当前最短木棍,有则t+=1,如果t=sum/len,(sum为所有木棍长度总和)则len为所求值。

? ? 以上只是解题的大体思路,要在合法时间内完成搜索,还必须剪枝。首先将截后木棍长度按降序排列,假设当前节点号为node,当前搜索长度为s(s从0开始,一步一步增加看是否能达到len)如果node满足len[node]+s<=len && mark[node]==0,那么在搜索下一节点时只需从node+1 开始搜索,而无须从0号开始搜索,以内0——node已经被搜索而无须重复搜索,另外还要注意,如果len[node]不符合条件,那么与len[node]等长的节点也不符合条件。

? ? 下面是网上一个大牛的代码,非本人。

#include<iostream>
using namespace std;
int a[64];
int mark[64];

int sum,len,sticks,num,rest;
bool flag;

void dfs(int t,int s,int node)
{ ?
? if(t==num) flag=1;
? else if(s==len && rest%s==0 ) ?
? dfs(t+1,0,0); //第二层搜索
? else?
? for(int i=node,pre=-1;i<sticks;i++)//只需搜索node之后的节点,pre是为了在该节点不符合的情况下,避 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// ?免搜索同等长度的节点
? {
? if( mark[i]==0&&a[i]!=pre && s+a[i]<=len )
? {
? pre=a[i];
? mark[i]=1;
? rest-=a[i];
? dfs(t,s+a[i],i+1); ?//第一层搜索
? mark[i]=0;
? rest+=a[i];?
? if(flag==1 || node==0)return ;
? }
? }
} ?
? ?
int main()
{
?while(cin>>sticks && sticks!=0)
?{
? int max=0;?
? sum=0,flag=0;?

? for(int i=0;i<sticks;i++)
? {
? cin>>a[i];
? if(max<a[i])max=a[i];
? sum+=a[i];
? if(i>=1)//?
? {
? int temp=a[i];
? int j;
? for(j=i-1;j>=0 && temp>a[j];j--)
? a[j+1]=a[j];
? a[j+1]=temp;?
? } ?
? }
? rest=sum;
? for(len=max;len<=sum ;len++)
? {
? memset(mark,0,sizeof(mark));?
?if(sum%len==0)
?{
? num=sum/len;
? dfs(0,0,0);
? }?
? if(flag==1)break;
? }
?cout<<len<<endl;
? }
}?

测试数据:
64
5 8 6 1 4 5 8 2 1 6 4 2 3 6 2 5 8 7 9 2 1 4 3 6 5 4 7 8?
2 6 5 1 4 5 3 6 5 6 2 1 4 7 8 9 5 2 1 9 4 7 5 2 3 6 9 4
5 8 9 2 4 6 3 6 9?

answer:17

3

1 5 8

answer:14

9
15 3 2 11 4 1 8 8 8

answer:20



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 朋友代购贵了怎么办 赢时通把车开走怎么办 杭州房子租不起怎么办 质量效应2吵架怎么办 学生有两个学籍怎么办 孩子出现双学籍怎么办 在外地读书学籍怎么办 上高中没学籍怎么办 电信欠费了网络怎么办 头发里长脓包怎么办 工作总是做不好怎么办 能力差的人该怎么办 洗衣机里有味道怎么办 洗衣机里面有味道怎么办 洗衣机内有味道怎么办 洗衣机总有味道怎么办 上体育课脚扭伤怎么办 教学实践评价表怎么办 初中孩子成绩下降怎么办 给孩子开家长会怎么办 读初三很难受怎么办 初三了英语很差怎么办 数学考30分怎么办 小学生阅读理解能力差怎么办 小学一年级数学差怎么办 小学一年级数学很差怎么办 初中生脸上长斑怎么办 初中生脸上长痘怎么办 初中成绩不好高中怎么办 农村老人去城里怎么办 留守儿童想妈妈怎么办 教师档案丢失了怎么办 转正定级表丢失怎么办 娃娃写作业慢怎么办 写作业眼睛疼怎么办 发生火灾怎么办大班教案 大班健康发生火灾怎么办 学生上课不提问怎么办 入户通知单丢了怎么办 打架后还来找事该怎么办 着火了怎么办教案视频