程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Uva - 10651 - Pebble Solitaire

Uva - 10651 - Pebble Solitaire

編輯:C++入門知識

題意:12個位置,有些有鵝卵石,有些是空的,2個連續的鵝卵石, 如果其左邊連著的那個是空的,那麼第二個鵝卵石可移動到那個空的位置上,並移除第1個鵝卵石; 如果其右邊連著的那個是空的,那麼第一個鵝卵石可移動到那個空的位置上,並移除第2個鵝卵石。 問最後最少可以剩下多少個鵝卵石。  option=com_onlinejudge&Itemid=8&page=show_problem&category=114&problem=1592 ——>> 狀態壓縮 判斷其若未是不可移動的最終態,則繼續進行dp,怎麼判?12個位置3個3個掃一次即可。 [cpp] v  #include      using namespace std;      int minn;   int dp(int x)   {       int i, cnt = 0;       for(i = 1; i <= 10; i++)           if(((x&(1<<(i-1))) && (x&(1<         {               x ^= (1<<(i-1));               x ^= (1<             x ^= (1<<(i+1));               int temp = dp(x);               if(temp < minn) minn = temp;        //更新最小值               x ^= (1<<(i-1));        //回溯               x ^= (1<             x ^= (1<<(i+1));        //回溯               cnt++;           }       if(cnt == 0)        //判斷是否為最終態       {           int ans = 0;           for(i = 0; i < 12; i++)               if(x&(1<         if(ans < minn) minn = ans;       }       return minn;   }   int main()   {       char s[15];       int T, i;       cin>>T;       while(T--)       {           cin>>s;           int a = 0;           for(i = 0; i < 12; i++)               if(s[i] == 'o') a = a^(1<         minn = (1<<30);           cout<     }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved