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

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 閱讀(4048) 評論(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>
            亚洲日本va午夜在线影院| 1769国内精品视频在线播放| 亚洲私人影院| 在线视频免费在线观看一区二区| 亚洲免费成人av| 亚洲一区二区成人在线观看| 欧美一级久久久| 免播放器亚洲一区| 欧美视频中文字幕| 国产视频在线观看一区二区| 亚洲电影在线看| 亚洲免费网站| 免费成人毛片| 日韩一级欧洲| 欧美一区二区高清| 久久综合色影院| 欧美三级网址| 在线观看成人av| 亚洲图片激情小说| 久久久五月天| 亚洲久色影视| 久久精精品视频| 欧美日韩精品一区二区| 国产在线精品一区二区中文| 亚洲国产婷婷| 欧美亚洲一区二区在线| 亚洲第一精品电影| 亚洲尤物在线| 欧美精品日韩综合在线| 国产视频亚洲精品| 亚洲午夜在线视频| 亚洲高清免费在线| 欧美专区亚洲专区| 国产精品久久网| 一区二区精品国产| 亚洲电影第三页| 久久久久久噜噜噜久久久精品| 国产精品r级在线| 亚洲人精品午夜在线观看| 久久激五月天综合精品| 国产欧美日韩在线观看| 美女网站在线免费欧美精品| 国产精品嫩草99a| 亚洲毛片av在线| 免费不卡在线观看| 久久狠狠一本精品综合网| 国产精品久久久久久户外露出| 亚洲人成人99网站| 欧美福利视频在线| 久久国产88| 国产色产综合色产在线视频| 亚洲一区中文| 9国产精品视频| 欧美日韩免费看| 日韩手机在线导航| 亚洲国产一区二区精品专区| 久久一综合视频| 永久555www成人免费| 免费看的黄色欧美网站| 麻豆成人小视频| 亚洲免费观看高清完整版在线观看熊 | 亚洲午夜精品久久久久久浪潮| 欧美国产免费| 免费精品视频| 亚洲黄网站黄| 亚洲精品孕妇| 国产精品二区在线| 久久gogo国模裸体人体| 欧美一区视频在线| 亚洲第一级黄色片| 亚洲精品乱码| 国产精品人成在线观看免费| 欧美一区影院| 久久久青草青青国产亚洲免观| 亚洲国产精品一区二区第四页av| 欧美激情亚洲| 欧美午夜免费| 久久亚洲免费| 欧美区一区二区三区| 亚洲欧美国产一区二区三区| 欧美一级大片在线观看| 亚洲丶国产丶欧美一区二区三区 | 亚洲一区在线播放| 欧美一区二区免费| 亚洲人成免费| 亚洲在线播放电影| 在线播放一区| 99国产精品久久久久老师 | 99精品免费视频| 亚洲一区二区三区高清不卡| 久久影院午夜片一区| 久久亚洲私人国产精品va| 久久精品国产99精品国产亚洲性色 | 欧美在线黄色| 美女性感视频久久久| 亚洲在线播放| 欧美xxxx在线观看| 欧美尤物一区| 欧美美女视频| 久久久之久亚州精品露出| 欧美好吊妞视频| 久久久久高清| 欧美日韩一区在线| 欧美+日本+国产+在线a∨观看| 欧美另类videos死尸| 久久久免费精品| 欧美午夜影院| 亚洲国产精品国自产拍av秋霞| 国产精品日韩精品| 亚洲精品网站在线播放gif| 国产亚洲精品久久飘花| 亚洲免费福利视频| 在线播放亚洲| 久久av一区二区三区漫画| 亚洲一区二区四区| 欧美精品免费在线| 欧美成人精品h版在线观看| 国产欧美日韩中文字幕在线| 一本色道久久综合狠狠躁篇怎么玩| 黄色一区二区三区四区| 亚洲一区二区三区久久| 亚洲小说区图片区| 欧美精品一区二区蜜臀亚洲| 蜜臀va亚洲va欧美va天堂| 国产一区在线视频| 午夜精品久久久久久久白皮肤| 亚洲专区一区| 国产精品久久99| 一区二区三区 在线观看视频| 99国产精品久久久久久久| 欧美成人国产va精品日本一级| 久久野战av| 黄色在线成人| 久久免费视频一区| 免费在线成人| 亚洲经典一区| 欧美成人精品h版在线观看| 欧美成人精品1314www| 亚洲激情六月丁香| 欧美精品一区二区在线观看| 最新国产精品拍自在线播放| 99国产精品国产精品毛片| 牛牛精品成人免费视频| 亚洲国产欧美一区二区三区丁香婷| 亚洲国产小视频| 欧美激情一区在线| 亚洲九九精品| 亚洲欧美中文日韩v在线观看| 国产精品九九久久久久久久| 亚洲欧美日韩国产精品 | 亚洲毛片播放| 亚洲欧美乱综合| 国产日韩欧美a| 亚洲另类在线一区| 国产一区视频观看| 欧美一区二区三区久久精品 | 亚洲第一色在线| 久久综合亚洲社区| 免费亚洲电影在线| 91久久一区二区| 91久久精品国产| 欧美视频免费| 久久久91精品国产一区二区精品| 亚洲视频精选| 亚洲欧洲免费视频| 亚洲国产成人不卡| 国产精品福利网| 久久国产黑丝| 欧美国产亚洲精品久久久8v| 一区二区三区欧美成人| 亚洲综合欧美| 在线日本成人| 亚洲图片欧美午夜| 136国产福利精品导航网址| 亚洲电影专区| 国产欧美日韩精品在线| 免费在线播放第一区高清av| 欧美精品三级| 老司机午夜精品| 欧美视频1区| 亚洲国产婷婷香蕉久久久久久99 | 久久久久久久综合色一本| 亚洲美女在线一区| 欧美在线视频导航| 亚洲一区视频在线| 欧美韩日一区二区| 欧美韩日一区二区三区| 国产日本欧洲亚洲| 一本色道久久综合亚洲二区三区| 国产精品爽爽爽| 亚洲高清视频在线观看| 亚洲在线一区二区| 欧美日韩成人在线观看| 欧美成人高清| 亚洲男人的天堂在线| 国产精品99久久不卡二区| 欧美成人一品| 亚洲精品国产精品乱码不99| 在线看无码的免费网站| 久久精品视频免费观看|