PIXNET Logo登入

Edison.X. Blog

跳到主文

YouLoveMe() ? LetItBe() : LetMeFree() ;

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 1月 27 週四 201120:02
  • 整數規劃 (2)

第二個問題
假設 1a+2b+3c+4d+5e+6f >=10 且 2a+3b+4c+5d+6e+7f <= 21,其中 a,b,c,d,e,f 都是大於等於 0 的整數,要求符合條件的 abcdef,這裡主要的問題是第一個限制式,因為它是愈加愈大,所以如果用它拿來當主判斷的話會遺失很多可用資訊。這裡用第二式為主判斷,判斷成功後再去判斷第一式合不合條件,原始碼如下
#include <stdio.h>
#include <stdlib.h>

#define N 6
const int coef1[N] = {1,2,3,4,5,6};
const int coef2[N] = {2,3,4,5,6,7};

const int lim1 = 10, lim2 = 21;
int sol[N] = {0};
int sol_cnt=0;


inline void print_sol()
{
int i;
printf("Cnt%4d:(", sol_cnt+1);
for(i=0; i!=N; ++i) printf("%c=%d,", 'a'+i, sol[i]);
printf(")\n");
++sol_cnt;
}
void dfs(int index, int sum1, int sum2)
{
sum1 += coef1[index]*sol[index];
sum2 += coef2[index]*sol[index];
if(index==N-1 && sum2 <= lim2) {// 合條件2
if(sum1>=lim1) print_sol(); // 合條件1
// 再試下個數字
sum1 -= coef1[index]*sol[index];
sum2 -= coef2[index]*sol[index];
++sol[index];
dfs(index, sum1, sum2);
}
else if(sum2<=lim2) {// 暫時合條件2
dfs(++index, sum1, sum2);
}
else{ // 不合條件2
// 回到上一個狀態, sol[index] 設成0
sum1-= coef1[index]*sol[index];
sum2-= coef2[index]*sol[index];
sol[index]=0;
--index;
if(index<0) return; // 結束
sum1-= coef1[index]*sol[index];
sum2-= coef2[index]*sol[index];
++sol[index];
dfs(index, sum1, sum2);
}
}
int main()
{
dfs(0, 0, 0);
return 0;
}
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(811)

  • 個人分類:回溯.列舉.遞迴
▲top
  • 1月 27 週四 201119:58
  • 整數規畫 (1)

考慮一個簡單的問題
x+Y <= 3,其中 x, y 為大於等於 0 之整數,要把所有符合條件的 x, y 都列出來。
這問題只是簡單的 trackback ,用 recursive 很快可得到解答,說明有空再寫。
原始碼如下
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(181)

  • 個人分類:回溯.列舉.遞迴
▲top
1

個人資訊

edisonx
暱稱:
edisonx
分類:
數位生活
好友:
累積中
地區:

熱門文章

  • (4,977)多測資處理
  • (21,951)bitset 整理
  • (111,303)[C&++] 字串整數轉換
  • (444,404)[C] printf 引數說明
  • (39,454)[C] scanf 引數說明
  • (49,761)VBA Procedure 簡述
  • (58,120)[浮點數] IEEE754 , C/C++ 浮點數誤差
  • (80,134)[C] 計時器整理
  • (53,330)[Poker] 撲克牌遊戲設計介紹
  • (143,109)C/C++ 學習歷程分享

文章分類

toggle 開發手札 (2)
  • 未實作的想法 (4)
  • 心得筆記 (2)
toggle C/C++ (8)
  • C/C++ Note (52)
  • 亂數 (10)
  • Debug (9)
  • Hidden Features in C (6)
  • OO NOTE (0)
  • 面試題庫 (12)
  • C/C++ FAQ (4)
  • STL Note (3)
toggle 應用軟體/工具 (1)
  • Office (1)
toggle 數值分析 (9)
  • 非線性方程式求解 (10)
  • 矩陣運算 (7)
  • 深入質數 (5)
  • 浮點數 (9)
  • 複數 Complex (2)
  • 積分法 (2)
  • 多項式內差法 (2)
  • 常見關於數 (5)
  • math.h/cmath application (8)
toggle 程式之美 (1)
  • 遊戲之樂 (3)
toggle VB.Net (1)
  • VB.Net Note (1)
toggle 英文 (1)
  • 專題單字 (1)
toggle AutoIt!! (2)
  • AutoIt!! Note (13)
  • Auto-Dll (9)
toggle VBA (4)
  • VBA FAQ (5)
  • VBA Note (9)
  • VBA tec. (1)
  • VBA_Note2 (3)
toggle MFC (1)
  • MFC雜記 (4)
toggle Win32 (8)
  • Process (10)
  • Win32-Console (5)
  • 檔案系統 (1)
  • 音效 (1)
  • 隱喻外掛 (3)
  • System undoc. (0)
  • GDI (2)
  • 記憶體管理 (1)
toggle 環境與Script (4)
  • visual studio (6)
  • 批次檔batch (2)
  • 程式環境架構 (3)
  • Library (3)
toggle 數學整理 (2)
  • 常用公式 (1)
  • 有趣數學 (2)
toggle 演算法 (7)
  • Bit-Hacks (1)
  • AI (13)
  • 大數 (5)
  • 資料結構 (0)
  • 影像 (2)
  • 遞迴-recursive (2)
  • 回溯.列舉.遞迴 (2)
toggle 程設亂語 (1)
  • 胡言亂語 (10)
toggle SmallTalk (1)
  • SmallTalk (27)
  • 未分類文章 (1)

最新文章

  • 轉戰 python
  • [MFC] CArray 注意事項
  • 你真的很狠...
  • [開發手札] tool 整理 <NOTE>
  • [開發手札] vs dll 相容性
  • [開發手札] vc 效率問題
  • [開發手札] 修改 exe 裡面的 constant
  • [開發手札] 受不了 IDE 常當機問題...
  • [Job] Job Journal 130501
  • [面試] some tips

動態訂閱

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣:

留言板