求回溯法連續郵資問題的C或C語言程式,急

2021-03-05 22:25:17 字數 1850 閱讀 9489

1樓:匿名使用者

什麼連續郵資 說清楚點

是這個題嗎?

我們寄信都要貼郵票,在郵局有一些小面值的郵票,通過這些小面值郵票中的一張或幾張的組合,可以滿足不同郵件的不同的郵資。

現在,郵局有4種不同面值的郵票。在每個信封上最多能貼5張郵票,面值可相同,可不同。

輸入:四種郵票的面值。

輸出:用這四種面值組成的郵資最大的從1開始的一個連續的區間。

說明:如結果為10,則表明使用4張郵票可組合出1、2、3、4、5、6、7、8、9、10這些郵資。

如果是 那不用回溯法

窮舉就行了

#include

main()

}else break; }}

printf("the max is %d.\n",max);}

2樓:一起玩

#include

using namespace std;

int aim,now=0,fm[105],n,big=0,m,hf[25505];

bool f[25505];

int main()

for(int i=2;i<=n;i++)for(int j=1;j<

int ans=0,max=0;

for(int i=1;i<=big*n;i++)printf("%d",max);

return 0;

}//寫法不規範

回溯 連續郵資問題 詳細解析 pascal

3樓:匿名使用者

你好,解釋一下做法

bool c[255*100] // c[j] 記錄 面值

綜合為j的方案存不存在

count[j] 是面值為j的郵票當前剩餘多少枚

核心處理方法:

procedure try (count[255]:integer;sum:integer;use:integer)//sum是當前的總和 use是用了的枚數

begin

if use>n then exit; //如果用的超出了限制數目 退出子程式 不再進行下去

c[sum]=true; //當前的組合總值是可以被組合的 , 所以把這格填寫true

for i:=1 to 255 do //窮舉所有面值

if count[i]>0 // 有可用的郵票

begin //進行嘗試

count[i]:=count[i]-1; // 因為使用了所以暫時-1

try(count[255],sum+i) //進行遞迴 , 總和加上了這次選擇的面值 i

count[i]:=count[i]+1; //還原面值可用數量

end;

end;

主程式一開始要做的是:

begin

read(m,n);

for i:=1 to m do

begin

read(tmp);count[tmp]:=n; //初始化

end;

try(count[255],0,n);//嘗試組合可能性

for i:=1 to 25500 //所有可能的組合 temp是目前連續的數目 if (c[i]=false) temp:=0

else begin

temp:=temp+1;

if temp>ans ans:=temp; //和答案比較 求最大值

end;

writeln(ans);

end.

不明白可以追問 :) 希望能採納 打了半天xd

c或c 結構體成員的呼叫的問題

什麼問題沒講明白,沒有人能知道給你解答 c的結構體與c 的結構體的區別 答 標準c中定義,c語言中的結構體內是不能宣告函式的 c 結構體中可以有函式的宣告,不過他們都是歷史遺留下來的產物 現在,應該避免使用結構體,因為結構體都可以由類來代替 你應該問類與結構的區別,類中如果不宣告成員的訪問控制屬性,...

求C語言問題的程式,求一個C語言問題的程式!

include stdio.h include string.h include ctype.h int invertion char ch1,char ch2,int n 原字串由形參傳給ch1,倒排後字串 目前是空串 傳給ch2,字串長度傳給n main 啊,看錯了,是單詞倒排不是整串倒排,你把...

求回答簡單的c語言問題,求回答簡單的C語言問題

對於第一個問題建議你好好看看逗號運算子以及其作用,實際上 c c,c 8,c 相當於 c c 當然 c是先自加1再結算值,也就是說c的值就是5 6,也就是11。所以a的最終值就是13了。第二個問題其實就是一個自加運算子的問題,注意x 是先取x的值,之後表示式結束後再減1。所以輸出就是10和9了。最後...