コード例 #1
0
ファイル: Combination Sum.hpp プロジェクト: repstd/algorithm
 vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     if (candidates.size() == 0)
         return vector<vector<int> >();
     sort(candidates.begin(),candidates.end());
     vector<vector<vector<int> > > *pR = new vector<vector<vector<int> > >(target + 1);
     vector<vector<vector<int> > > *pT = new vector<vector<vector<int> > >(target + 1);
     for (int t = 1; t <= target; ++ t)
     {
         int c = candidates[0];
         if (t % c == 0)
         {
             (*pR)[t].push_back(vector<int>(t/c,c));
         }
     }
     for (int k = 1; k < candidates.size(); ++k)
     {
         int ck = candidates[k];
         for (int t = 1 ; t <= target; ++t)
         {
             (*pT)[t].clear();
             for (int p = 0; p * ck <= t; ++p)
             {
                 int remain = t - ck * p;
                 if (remain == 0)
                 {
                     (*pT)[t].push_back(vector<int>(p,ck));
                 }
                 else
                 {
                     vector<vector<int> > &rRemain = (*pR)[remain];
                     for (int irr = 0; irr < rRemain.size() ;++ irr)
                     {
                         vector<int> newSum(rRemain[irr]);
                         for(int ip = 0; ip < p; ++ip)
                             newSum.push_back(ck);
                         (*pT)[t].push_back(newSum);
                     }
                 }
             }
         }
         vector<vector<vector<int> > > *pTemp = pR;
         pR = pT;
         pT = pTemp;
     }
     return (*pR)[target];
 }
コード例 #2
0
ファイル: nim.c プロジェクト: ppenna/nanvix
void think()
{
	title();
	draw();

	if (turn == COMPUTER)
	{
		printf("\nBom, agora e minha vez, posso jogar? (1:sim)  ");
		get();

		int  sum;
		bool isSec = false;

		for (int x=1; x<7 && !isSec; x++)
		{
			for (int y=0; y<4 && !isSec; y++)
			{
            	if ( (comb[y] == 0) || (comb[y] - x < 0) )
            		continue;

            	sum = newSum(y) + nBin[ comb[y]-x ];
            	
            	if (isSecure(sum) == true)
            	{
            		isSec = true;
            		comb[y] -= x;
            		sticksCount -= x;
            	}
            }
    	}

    	if(isSec == false)
    	{
    		for(int i=0; i<4; i++)
    		{
    			if(comb[i] != 0)
    			{
    				comb[i] -= 1;
    				sticksCount--;
    				break;
    			}
    		}
    	}

    	turn = PLAYER;
	}
	else if (turn == PLAYER)
	{
		int row, count;

		printf("Ok, entao digite a fileira que deseja operar (1-4): ");
		row = get() - 48;
		
		printf("Ok, agora me informe quantas pecas deseja remover: ");
		count = get() - 48;

		comb[row-1] -= count;
		sticksCount -= count;

		turn = COMPUTER;
	}
}