青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

oyjpArt ACM/ICPC算法程序設(shè)計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

PKU 1011 Sticks

Posted on 2006-11-30 00:34 oyjpart 閱讀(4064) 評論(15)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽
這道題作的我真的是悲喜交加阿。。。做完之后。。。長舒一口氣。。推薦大家去做!!!

Sticks
Time Limit:1000MS? Memory Limit:10000K
Total Submit:18973 Accepted:4421

Description
George took sticks of the same length and cut them randomly until all parts became at most 50 units long. Now he wants to return sticks to the original state, but he forgot how many sticks he had originally and how long they were originally. Please help him and design a program which computes the smallest possible original length of those sticks. All lengths expressed in units are integers greater than zero.

Input
The input contains blocks of 2 lines. The first line contains the number of sticks parts after cutting, there are at most 64 sticks. The second line contains the lengths of those parts separated by the space. The last line of the file contains zero.

Output
The output should contains the smallest possible length of original sticks, one per line.

Sample Input

9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
0

Sample Output

6
5 















1。我從大到小搜索了哇 沒用。。。
2。我想 用預(yù)先得到所有可拼湊長度來HASH 發(fā)現(xiàn)太大...
3。然后我想對每個長棍分開搜索...
4。后來我又用記錄數(shù)目的方法搜 似乎更慢...
終于發(fā)現(xiàn)真正重要的剪枝!
1.當(dāng)一個正好可以填滿的時候 就不用考慮比他小的去填了
2.一大段的第一個小段如果不成立直接返回到上一大段
這才是重要的剪枝
同時還有一個 要預(yù)防反復(fù)搜索同一關(guān)鍵碼 給出下面的測試數(shù)據(jù)
64
40 40 40 40 40 40 40 40 40 40 40 40 40
40 40 40 40 40 40 40 40 40 40 43 42 42
41 10 4 40 40 40 40 40 40 40 40 40 40
40 40 40 40 40 40 40 40 40 40 40 40 40
40 40 40 40 40 40 40 40 40 40 40 40
0
呵呵 其實AC的程序里面有一大部分都過不了這個數(shù)據(jù)!包括0MSAC的!

呵呵 過了之后 心情好啊~`哈哈
//Solution
//by optimistic
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int nss;
int ss[70];
int used[70];
int totss;
int maxss;
int len;
int cmp(const void * a, const void * b)
{
?return (*(int *)b) - (*(int *)a);
}
int search(int times, int rest, int pos)
{
?int flag = 0;
?if(rest == len) flag = 1; //第一種剪枝
?int i;
?if(times == totss/len) return 1;
?for(i = pos; i<nss; i++)
??if(!used[i])
??{
???if(rest == ss[i])
???{
????used[i] = 1;
????if(search(times+1, len, 0))?return 1;
????used[i] = 0;
??? ?return 0;????????????????????? //第二種剪枝???????????????????????????????????????????????????????????????????
???}
???else if(ss[i]<rest)
???{
????used[i] = 1;
????if(search(times, rest-ss[i], i+1)) return 1;
????used[i] = 0;
????if(flag) return 0;
????while(ss[i] == ss[i+1]) i++;
???}
???else if(flag) return 0;
??}
?return 0;
}
int main()
{
//?freopen("t.in", "r", stdin);
?int i;
?while(scanf("%d", &nss), nss>0)
?{
??memset(ss, 0, sizeof(ss));
??totss = maxss = 0;
??for(i=0; i<nss; i++)
??{
???scanf("%d", &ss[i]);
???totss += ss[i];
???if(ss[i]>maxss) maxss = ss[i];
??}
??qsort(ss, 70, sizeof(ss[0]), cmp);
??for(i=maxss; i<=totss; i++)
??{
???if(i==totss)
???{printf("%d\n", totss); break;}
???if(totss%i==0)
???{?????
????memset(used, 0, sizeof(used));
????len = i;

????if(search(1, len, 0)) {printf("%d\n", i); break;}
???}
??}
?}
?return 0;
}




Feedback

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2007-04-13 23:40 by Jun Wang
if(search(1, len, 0)) {printf("%d\n", i); break;}
是不是要改成 if(search(0, len, 0)) {printf("%d\n", i); break;} ??

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2007-07-22 19:28 by Typhoooooooooooooooooooooooooooooooooon
感謝你那兩個重要的剪枝哈

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2007-10-24 11:00 by delguoqing
你上面這個測試數(shù)據(jù)的ouput是多少?

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-04 23:46 by mango
你測這個... 你的半天也出不來...
64
40 40 30 35 35 26 15 40 40 40 40 40 40 40 40 40 40 40 40 40 40

40 40 43 42 42 41 10 4 40 40 40 40 40 40 40 40 40 40 40 40 40

40 25 39 46 40 10 4 40 40 37 18 17 16 15 40 40 40 40 40 40 40

40

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-05 09:02 by oyjpart
的確啊,很強大的數(shù)據(jù)啊

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-05 18:42 by zoyi
答案是454~~可是我的程序居然是wa~5555555555

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-05 20:10 by oyjpart
哦?你怎么知道答案啊

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-06 19:43 by zoyi
我的程序跑出來的啊~~難道你懷疑我跑的是錯誤的???哈哈@oyjpart

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-07 12:49 by mango
哎......這個數(shù)據(jù)真變態(tài)...煩死了 呵呵

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-07 21:06 by oyjpart
哦。。。你過題了沒

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-05-22 15:59 by zsong
我跑出454了,很快,不過也是wa

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-08-12 20:45 by zjh777007
誰能告訴我
“一大段的第一個小段如果不成立直接返回到上一大段”
什么意思?

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-08-12 20:53 by oyjpart
現(xiàn)在由一個當(dāng)前情況S.
這個時候比如有一個大棍子,長度為20,現(xiàn)在嘗試在其中放入一個長度為5的小棍子。結(jié)果深搜得到的結(jié)果是不可行,則認(rèn)為當(dāng)前情況是無解的。
因為這個5長度的小棍子放不了這個大棍子,絕對放不了任何一根大棍子。

# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-11-30 11:29 by abc
#include<iostream>
#include<string>
#include<fstream>
#include<vector>
#include<ctime>
using namespace std;
fstream fin("e:\\office\\txt\\acmin.txt");
int l[65];
int s,t,min,sum=0,len;
int max2;
int count=0;
int c=0;
static int used[65];
int search(int leni, int s){
if(leni==0) return 100;
t=s;
int count=0;
while(l[t]>leni||used[t]){
t--;
if(t==0){
//break;
return 0;
}
}
used[t]=1;
count++;
if(l[t]<=leni){
int se=search(leni-l[t],s-1);

if(se>=100){
count+=(se-100);
//if((leni-l[t])!=0){
//if(count<s){
c=1;
for(int i=1;i<=s;i++)c*=used[i];
if(!c){
int sea=search(len,s-1);
if(sea>=100){
count+=(sea-100);
return count+100;
}/*else{
return 0;
}*/
//}
}
}
/*else{
return 0;
}*/
}
count+=100;
return count;
}
int main(){
cin>>s;
while(s){

max2=0;
sum=0;
count=0;
for(int i=0;i<65;i++)used[i]=0;
for(int i=1;i<=s;i++){
cin>>l[i];
if(l[i]>max2){
max2=l[i];
}
sum+=l[i];
}
for(int i=0;i<=s;i++){
for(int j=0;j<s-i;j++){
if(l[j]>l[j+1]){
int temp=l[j];
l[j]=l[j+1];
l[j+1]=temp;
}
}
}
cout<<"sum"<<sum<<endl;
for(int i=max2;i<=sum;i++){
len=i;

for(int j=0;j<65;j++)used[j]=0;
if(sum%i!=0)continue;

int k=search(i,s);

if(k>100){

if((k-100)==s){cout<<i<<endl;break;}
}else{
continue;
}
}
cin>>s;
}

}













# re: PKU 1011 Sticks   回復(fù)  更多評論   

2008-11-30 11:30 by abc
各位高手幫忙看一下上面的程序有什么錯誤,萬分感激!
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品激情| 亚洲娇小video精品| 亚洲日韩欧美视频| 99精品国产在热久久| 久久中文字幕一区| 国产日韩一区在线| 午夜精品一区二区三区在线视 | 狠狠色丁香婷综合久久| 欧美在线视频a| 亚洲免费在线精品一区| 国产精品激情偷乱一区二区∴| 日韩亚洲欧美精品| 亚洲国产天堂久久综合网| 久久er精品视频| 欧美久久成人| 日韩网站在线观看| 久久人人九九| 99精品久久免费看蜜臀剧情介绍| 欧美中文日韩| 91久久在线视频| 日韩视频不卡| 国产精品―色哟哟| 久久网站热最新地址| 欧美在线播放高清精品| 午夜精品一区二区在线观看 | 欧美视频一区在线| 亚洲一区在线观看视频| 午夜欧美大片免费观看| 亚洲第一页在线| 亚洲欧洲日本在线| 国产精品亚洲激情| 亚洲自拍16p| 欧美一区二区三区免费视| 久久手机精品视频| 蜜乳av另类精品一区二区| 欧美激情一区二区| 欧美专区亚洲专区| 国产欧美日韩免费| 最新亚洲电影| 在线视频日韩精品| 久久精品水蜜桃av综合天堂| 亚洲精品中文字幕在线| 午夜精品久久久久久久男人的天堂 | 欧美www在线| 亚洲在线免费| 国产欧美日韩精品专区| 欧美一区免费| 亚洲男人的天堂在线aⅴ视频| 久久亚洲精选| 最近中文字幕mv在线一区二区三区四区 | 国产精品久久久久一区二区三区| 欧美.com| 国产一区在线播放| 亚洲午夜成aⅴ人片| 亚洲高清在线精品| 久久精品国产清高在天天线| 亚洲午夜在线观看| 欧美精品一区二区高清在线观看| 亚洲人体一区| 亚洲国产日韩欧美一区二区三区| 欧美国产第一页| 欧美高清在线| 韩国精品久久久999| 欧美国产先锋| 午夜欧美不卡精品aaaaa| 欧美丰满高潮xxxx喷水动漫| av成人免费在线| 欧美精品久久天天躁| 亚洲天堂免费观看| 欧美肥婆在线| 久久精品日产第一区二区| 欧美性理论片在线观看片免费| 亚洲理伦在线| 亚洲天堂偷拍| 欧美特黄一区| 麻豆91精品91久久久的内涵| 欧美二区视频| 久久大香伊蕉在人线观看热2| 亚洲七七久久综合桃花剧情介绍| 国产精品午夜视频| 欧美精品在线播放| 久久米奇亚洲| 性欧美暴力猛交另类hd| 亚洲精品影院| 欧美高清在线| 久久久青草婷婷精品综合日韩| 国产一区二区观看| 久久一区激情| 亚洲欧美国产毛片在线| 亚洲精品视频在线| 欧美黄色网络| 在线亚洲免费视频| 最新精品在线| 亚洲第一精品福利| 国内精品久久久久久 | 久久国产精品99精品国产| 99综合电影在线视频| 亚洲电影免费观看高清| 国产日韩精品综合网站| 欧美日韩人人澡狠狠躁视频| 在线中文字幕一区| 久久久久国产精品一区三寸| 精品91在线| 欧美激情久久久| 免费成人性网站| 另类尿喷潮videofree| 久久精品国产亚洲一区二区三区 | 久久精品日韩| 久久不射2019中文字幕| 亚洲欧美国产日韩中文字幕| 亚洲天堂免费观看| 亚洲无玛一区| 亚洲欧美另类久久久精品2019| 在线中文字幕一区| 亚洲私拍自拍| 亚洲午夜在线| 亚洲欧美日韩一区二区在线 | 亚洲私人影院| 亚洲色图在线视频| 亚洲一区激情| 亚洲福利在线视频| 亚洲欧美资源在线| 欧美一区二区私人影院日本| 欧美影院精品一区| 久久米奇亚洲| 欧美激情在线| 日韩小视频在线观看| 这里只有精品电影| 亚洲免费伊人电影在线观看av| 午夜精品福利在线| 久久一区二区三区av| 欧美激情综合网| 国产精品久久久久久久免费软件| 国产日韩欧美亚洲| 在线精品亚洲| 艳妇臀荡乳欲伦亚洲一区| 亚洲永久在线观看| 久久伊人精品天天| 亚洲精华国产欧美| 亚洲一区二区在| 久久亚洲综合| 欧美特黄一级大片| 激情自拍一区| av成人激情| 久久精品一本| 亚洲国产精品精华液网站| 一本色道精品久久一区二区三区 | 国产日韩欧美视频| 亚洲欧洲一区二区在线播放| 一本色道久久综合亚洲精品按摩| 午夜精品婷婷| 欧美激情一区二区三区在线视频观看| 日韩一级精品| 久久久亚洲欧洲日产国码αv| 久久成人国产| 欧美另类视频| 国产在线拍偷自揄拍精品| 亚洲二区在线观看| 翔田千里一区二区| 久久精品成人一区二区三区蜜臀| 蜜桃av噜噜一区| 亚洲桃花岛网站| 欧美 日韩 国产 一区| 男女av一区三区二区色多| 国产精品二区二区三区| 亚洲人成网站777色婷婷| 久久不射2019中文字幕| 亚洲美女中出| 乱码第一页成人| 国产丝袜一区二区三区| 一区二区三区偷拍| 欧美高清视频在线观看| 欧美一区二区日韩| 欧美小视频在线| 亚洲美女诱惑| 免费在线国产精品| 性欧美大战久久久久久久免费观看| 欧美韩日一区二区三区| 黄色另类av| 欧美在线精品免播放器视频| 亚洲每日更新| 欧美黄色一区| 亚洲国产高清一区二区三区| 久久高清国产| 亚洲欧美在线免费| 国产精品av免费在线观看| 亚洲精品欧美日韩| 欧美肥婆bbw| 久久综合电影| 亚洲第一在线综合网站| 麻豆精品网站| 日韩亚洲一区二区| 欧美黄色免费网站| 亚洲精品孕妇| 亚洲国产日韩欧美在线动漫| 美女视频黄免费的久久| 亚洲电影免费在线观看| 免费短视频成人日韩| 久久人人爽爽爽人久久久| 亚洲精品中文字幕有码专区|