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

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 閱讀(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。我想 用預先得到所有可拼湊長度來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>
            欧美日韩成人网| 国产精品久久999| 一区在线影院| 久久全国免费视频| 欧美亚洲三区| 在线精品视频一区二区| 久久中文精品| 欧美国产日韩一区二区在线观看| 亚洲人成小说网站色在线| 亚洲激情国产精品| 欧美日韩亚洲一区三区| 亚洲欧美国产毛片在线| 欧美一区二区视频在线| 亚洲高清一区二区三区| 91久久亚洲| 国产精品色网| 久久一区视频| 欧美日韩国产91| 欧美在线视频在线播放完整版免费观看| 午夜精品剧场| 亚洲欧洲一区二区天堂久久| 艳妇臀荡乳欲伦亚洲一区| 国产亚洲成av人片在线观看桃| 免费高清在线视频一区·| 欧美激情一区二区三区在线视频| 亚洲综合精品自拍| 久久免费视频一区| 亚洲一级二级在线| 久久久国产午夜精品| 一本色道久久加勒比精品| 亚洲综合欧美日韩| 亚洲日本中文字幕免费在线不卡| 亚洲一区二区三区激情| 在线观看欧美日韩| 这里只有精品视频| 亚洲福利国产精品| 亚洲一区图片| 亚洲乱码国产乱码精品精天堂| 亚洲免费一级电影| 日韩亚洲欧美一区二区三区| 午夜伦欧美伦电影理论片| 亚洲精品视频一区| 久久久久久久久岛国免费| 亚洲午夜一区| 欧美日韩国产电影| 欧美成熟视频| 国产综合av| 亚洲欧美福利一区二区| 亚洲美女中文字幕| 久久亚洲精品视频| 久久精品视频在线播放| 国产精品伦子伦免费视频| 亚洲精品黄色| 日韩午夜精品| 欧美不卡福利| 欧美成人免费全部| 黄色精品网站| 久久精品99| 久久久精彩视频| 国产三区精品| 午夜精品久久久久久久99樱桃| 亚洲制服少妇| 国产精品久久久久久户外露出 | 美日韩免费视频| 国产日韩欧美亚洲一区| 亚洲在线观看| 欧美一级视频免费在线观看| 国产精品视频一| 亚洲视频欧美视频| 亚洲欧美中文日韩在线| 国产精品久久久久久久久久久久久| 日韩视频免费观看| 一区二区欧美激情| 国产精品国产自产拍高清av王其| 亚洲狼人综合| 午夜视频在线观看一区| 国产女优一区| 久久精品夜色噜噜亚洲a∨| 久久婷婷国产综合国色天香| 今天的高清视频免费播放成人| 欧美一区二区三区视频在线观看| 久久九九热免费视频| 激情欧美一区二区三区| 久久久爽爽爽美女图片| 免费在线看一区| 99国产精品久久久久久久久久 | 久久人91精品久久久久久不卡| 美女图片一区二区| 亚洲精品免费看| 欧美视频在线观看| 亚洲一二三区在线| 久久久久国产一区二区三区| 亚洲第一精品久久忘忧草社区| 免费不卡视频| 亚洲小少妇裸体bbw| 久久婷婷色综合| 99在线精品免费视频九九视| 国产伦精品一区二区三区四区免费| 欧美在线视频一区| 亚洲第一黄网| 欧美亚洲专区| 亚洲高清在线播放| 国产精品久久久久7777婷婷| 久久精品水蜜桃av综合天堂| 亚洲欧洲久久| 久久久97精品| 这里只有视频精品| 国内精品模特av私拍在线观看| 欧美激情一区二区三区在线视频观看 | 欧美成人伊人久久综合网| 亚洲精品系列| 国户精品久久久久久久久久久不卡| 欧美ed2k| 欧美伊人精品成人久久综合97| 亚洲国产午夜| 久久另类ts人妖一区二区 | 欧美午夜不卡| 久久综合九色欧美综合狠狠| 亚洲淫片在线视频| 亚洲第一在线综合在线| 欧美一区二区视频免费观看| 日韩视频一区二区三区| 激情久久综合| 国产精品在线看| 欧美日韩免费高清| 老妇喷水一区二区三区| 亚洲淫性视频| 99亚洲视频| 亚洲品质自拍| 亚洲国产日韩欧美| 麻豆久久久9性大片| 欧美在线观看一区二区三区| 99re亚洲国产精品| 亚洲黄色av一区| 激情综合网激情| 国产精品丝袜白浆摸在线| 欧美日韩精品福利| 欧美国产一区二区在线观看| 久久亚洲欧美| 狂野欧美一区| 久久综合导航| 模特精品在线| 欧美a级一区二区| 欧美电影在线观看完整版| 欧美1区3d| 欧美高清在线播放| 欧美国产三区| 欧美另类女人| 欧美日韩国产系列| 欧美全黄视频| 欧美精品一区视频| 欧美精品自拍偷拍动漫精品| 欧美激情国产日韩| 欧美日韩国产三级| 欧美亚州在线观看| 国产精品高潮在线| 国产精品美女一区二区在线观看| 国产精品区一区| 国产亚洲电影| 在线播放不卡| 99精品欧美| 亚洲欧美日韩国产精品| 欧美中文字幕精品| 久久综合色婷婷| 欧美大片91| 亚洲精品一区在线观看| 中文精品一区二区三区| 亚洲欧美国产高清va在线播| 欧美在线视频网站| 蜜臀久久久99精品久久久久久| 欧美精彩视频一区二区三区| 欧美三级视频在线| 国产热re99久久6国产精品| 国产一区二区三区精品久久久| 在线观看视频欧美| 一区二区国产日产| 久久久久久伊人| 亚洲人午夜精品| 欧美一区二区三区免费大片| 免费国产自线拍一欧美视频| 国产精品久久久久久久久动漫 | 欧美日韩三级| 国产一区999| 中文网丁香综合网| 久久综合久久美利坚合众国| 欧美黄色视屏| 亚洲男同1069视频| 免费亚洲网站| 国产精品免费一区二区三区观看| 韩日精品中文字幕| 亚洲午夜小视频| 欧美成人精品h版在线观看| 一区二区三区日韩| 欧美sm视频| 国内久久婷婷综合| 亚洲欧美国产日韩中文字幕| 亚洲第一中文字幕| 久久精品99久久香蕉国产色戒| 欧美午夜久久久| 亚洲欧洲一区二区在线观看 |