日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划例子

發布時間:2025/6/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于由從1到N (1 <= N <= 39)這N個連續的整數組成的集合來說,我們有時可以將集合分成兩個部分和相同的子集合。
例如,N=3時,可以將集合{1, 2, 3} 分為{1,2}和{3}。此時稱有一種方式(即與順序無關)。
N=7時,共有四種方式可以將集合{1, 2, 3, ..., 7} 分為兩個部分和相同的子集合:
{1,6,7} 和 {2,3,4,5}?
{2,5,7} 和 {1,3,4,6}?
{3,4,7} 和 {1,2,5,6}?
{1,2,4,7} 和 {3,5,6}?
輸入:程序從標準輸入讀入數據,只有一組測試用例。如上所述的N。
輸出:方式數。若不存在這樣的拆分,則輸出0。



對于從1到N的連續整集合,劃分為兩個子集合,且保證每個集合的數字和
是相等的。因而,劃分之后每個子集全的數字應該為n*(n+1)/2的一半,即n*(n+1)/4
由于兩個子集中都是整數,所以n*(n+1)必為偶數,則可以設s=n*(n+1),并判斷s%4 .
則,s/=4是劃分之后子集合的數字和;dyn[i]數組表示任意個數加起來等于i的組數
*/


num[0][0]?保持中間值

1? 多階段最優子結構

2?重復計算子問題

狀態轉移方程?

i>j

num[i][j]?=?num[i-1][j]?+?num[i-1][j-i];??????????

?? else???????????????????? num[i][j]?=?num[i-1][j];?


代碼實現:


#include<stdio.h> void main(){ int i,j,x,y,flag,sum; int input,outresult; int num[40][410] = {0}; num[0][0] = 1; scanf("%d",&input); x = input, y = (1 + input)*input/2; sum = y/2; flag = y%2; if(flag == 1) printf("0\n"); else{ for(i=1;i<=x;i++){ for(j=1;j<=y/2;j++) if(i<=j) num[i][j] = num[i-1][j] + num[i-1][j-i]; else num[i][j] = num[i-1][j]; } outresult = num[x][sum]; printf("%d\n",outresult); } }

總結

以上是生活随笔為你收集整理的动态规划例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。