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

oyjpArt ACM/ICPC算法程序設計空間

// 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 閱讀(4029) 評論(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。我想 用預先得到所有可拼湊長度來HASH 發現太大...
3。然后我想對每個長棍分開搜索...
4。后來我又用記錄數目的方法搜 似乎更慢...
終于發現真正重要的剪枝!
1.當一個正好可以填滿的時候 就不用考慮比他小的去填了
2.一大段的第一個小段如果不成立直接返回到上一大段
這才是重要的剪枝
同時還有一個 要預防反復搜索同一關鍵碼 給出下面的測試數據
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的程序里面有一大部分都過不了這個數據!包括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   回復  更多評論   

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   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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   回復  更多評論   

2008-05-05 09:02 by oyjpart
的確啊,很強大的數據啊

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

2008-05-07 12:49 by mango
哎......這個數據真變態...煩死了 呵呵

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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

# re: PKU 1011 Sticks   回復  更多評論   

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   回復  更多評論   

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>
            亚洲一区二区四区| 国产综合18久久久久久| 亚洲电影免费在线| 美女视频黄 久久| 美女网站久久| 一本色道**综合亚洲精品蜜桃冫| 日韩视频一区二区三区在线播放免费观看 | 宅男精品视频| 一区二区三区久久久| 国产精品一区亚洲| 久久综合福利| 欧美人与禽猛交乱配| 欧美一区激情| 欧美sm重口味系列视频在线观看| 99精品视频免费在线观看| 在线综合亚洲| 亚洲第一精品福利| 一本一本久久| 精品成人国产| 一区二区激情视频| 国产一级一区二区| 亚洲免费观看在线观看| 国内精品嫩模av私拍在线观看| 欧美gay视频激情| 欧美视频免费在线| 女同性一区二区三区人了人一| 欧美久久婷婷综合色| 欧美专区在线观看| 欧美日韩播放| 欧美波霸影院| 国产免费一区二区三区香蕉精| 欧美国产一区在线| 国产精品视频导航| 亚洲精品一区二区三区av| 狠狠88综合久久久久综合网| 日韩亚洲欧美在线观看| 亚洲免费av观看| 欧美大色视频| 欧美系列精品| 欧美国产日韩一区二区在线观看| 欧美午夜激情小视频| 久久综合亚洲社区| 国产精品亚洲美女av网站| 欧美国产成人在线| 国产一区二区0| 在线综合亚洲| 亚洲婷婷综合久久一本伊一区| 久久久精品久久久久| 午夜影视日本亚洲欧洲精品| 欧美激情精品久久久| 欧美不卡激情三级在线观看| 国产一区二区三区最好精华液| 99视频精品免费观看| 亚洲欧洲在线视频| 久久青草久久| 久久久久久久久久久成人| 国产精品嫩草99av在线| 一片黄亚洲嫩模| 中文av一区特黄| 欧美日韩性生活视频| 亚洲欧洲精品一区二区| 在线精品视频免费观看| 久久久www成人免费无遮挡大片| 性色av一区二区三区红粉影视| 国产精品成人va在线观看| 日韩视频免费| 亚洲一区二区三区在线播放| 欧美日本高清一区| 日韩一级欧洲| 午夜久久久久久| 国产农村妇女毛片精品久久莱园子| 亚洲视屏一区| 久久精品国产一区二区三区| 国产精品中文在线| 欧美一级网站| 欧美α欧美αv大片| 亚洲三级免费电影| 欧美日韩国产限制| 亚洲视频在线看| 久久精品一区二区三区不卡| 黄页网站一区| 欧美激情导航| 亚洲五月六月| 另类综合日韩欧美亚洲| 亚洲精品久久久久中文字幕欢迎你| 欧美另类专区| 午夜精品久久久久久久白皮肤| 巨乳诱惑日韩免费av| 亚洲欧洲一级| 国产精品久久久久久福利一牛影视| 亚洲欧美日韩国产成人| 蜜月aⅴ免费一区二区三区| 9色精品在线| 国产在线成人| 欧美日韩亚洲系列| 久久aⅴ国产紧身牛仔裤| 美女视频网站黄色亚洲| 亚洲性视频网址| 精品动漫3d一区二区三区免费版 | 欧美一区二区三区男人的天堂| 久久久综合精品| 一本久久综合| 伊人久久大香线| 欧美视频官网| 久久九九免费| 亚洲一区二区三区四区在线观看 | 日韩一级在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 一区二区日韩欧美| 伊人精品久久久久7777| 国产精品成人免费| 欧美激情bt| 久色婷婷小香蕉久久| 亚洲欧美日韩在线播放| 亚洲精品国产精品乱码不99| 久久一区精品| 久久成人免费电影| 亚洲无毛电影| 一区二区三区导航| 最新中文字幕亚洲| 黄色av成人| 国产日韩在线亚洲字幕中文| 欧美色图首页| 欧美日韩久久| 欧美精品免费观看二区| 久久婷婷影院| 久久伊人亚洲| 久久精品视频在线播放| 午夜精品成人在线| 亚洲男人第一网站| 亚洲特级片在线| 一本色道久久综合亚洲精品婷婷| 久久av一区二区| 久久综合网色—综合色88| 午夜激情综合网| 亚洲视频狠狠| 日韩一区二区福利| 亚洲三级视频在线观看| 亚洲欧洲日产国产综合网| 一区二区三区在线观看欧美| 国产综合自拍| 尤妮丝一区二区裸体视频| 国产亚洲一区二区三区| 国产一区二区三区四区五区美女 | 亚洲欧美日韩成人| 亚洲永久免费精品| 午夜精品婷婷| 欧美一区二区黄色| 久久精品卡一| 女同一区二区| 欧美精品尤物在线| 欧美日韩一区高清| 国产精品人成在线观看免费| 美女尤物久久精品| 美日韩免费视频| 欧美激情性爽国产精品17p| 欧美黄在线观看| 亚洲欧洲精品天堂一级| 一本一道久久综合狠狠老精东影业| 一区二区不卡在线视频 午夜欧美不卡在 | 久久在线视频| 欧美日韩成人| 国产精品人人爽人人做我的可爱| 国产精品日韩一区| 国产在线观看一区| 亚洲高清中文字幕| 一区二区三区免费看| 亚洲影院污污.| 久久久一区二区| 亚洲精品乱码久久久久久| 亚洲宅男天堂在线观看无病毒| 亚洲欧美日韩国产中文在线| 久久精品视频在线免费观看| 欧美wwwwww| 国产欧美日韩一级| 亚洲欧洲精品一区二区三区不卡| 在线亚洲自拍| 久久婷婷久久| 一区二区三区四区五区在线| 亚洲永久免费视频| 欧美国产日韩xxxxx| 国产精品免费网站| 91久久一区二区| 欧美在线免费视屏| 亚洲精选成人| 久久精品在线| 国产精品欧美精品| 亚洲国产第一| 欧美在线视频全部完| 欧美成人性网| 久久成人精品无人区| 欧美午夜无遮挡| 亚洲激情中文1区| 欧美自拍丝袜亚洲| av成人福利| 欧美日韩ab片| 亚洲精品欧美一区二区三区| 久久九九国产| 亚洲天堂av高清| 欧美日韩国产综合视频在线|