コード例 #1
0
ファイル: demonetization.c プロジェクト: TheAlgorithms/C
int ways(int n, int a[], int k)
{
    if(n<0 || k<0) return 0;
    if(n == 0) return 1;
    if(k == 0) return 0;
    return ways(n, a, k-1) + ways(n-a[k-1], a, k);
}
コード例 #2
0
ファイル: climbstairs.c プロジェクト: Garvit/code-backup
int ways(int n)
{
    if(dp[n]) return dp[n];
    int val=(ways(n-2)+ways(n-1))%MOD;
    dp[n]=val;
    return dp[n];

}
コード例 #3
0
ll ways(ll coderpos, ll linepos, ll bugpos){
	if(bugpos > maxbugs or coderpos > coders){
		return 0;
	} else if(linepos == linesneeded){
		return 1;
	} else if(coderpos == coders){
		return 0;
	}

	return ways(coderpos + 1, linepos, bugpos)
			+ ways(coderpos, linepos + 1, bugpos + bugsperline[coderpos]);
}
コード例 #4
0
long long ways(long long pos = 0, long long sum = 0, long long easy = 1000000000, long long hard = 0, long long taken = 0){
	if(pos == problems){
		if(sum >= min and sum <= max and hard - easy >= range and taken >= 2){
			return 1;
		} else {
			return 0;
		}
	}

	return ways(pos + 1, sum + diff[pos], std::min(easy, diff[pos]), std::max(hard, diff[pos]), taken + 1) +
				ways(pos + 1, sum, easy, hard, taken);
}
コード例 #5
0
ファイル: HW10-3.cpp プロジェクト: DBlackKat/c-work
int ways(int n)
{
	if(n==1)
	return 1;
	if(n==2)
	return 2;
	if(n==3)
	return 4;
	else if(n>3) 
	return ways(n-1)+ways(n-2)+ways(n-3);
	
}
コード例 #6
0
int main() {

    const long M = 1000000007;
    int n, k, d;
    scanf("%d %d %d\n", &n, &k, &d);
    std::vector<std::pair<long long, long long> > ways(n + 1);

    ways[0].first = 1;
    ways[0].second = 0;
    for(int p = 1; p <= n; p++) {
        for(int b = 1; b <= k && b <= p; b++) {
            if(b < d) {
                ways[p].first  += ways[p - b].first;
                ways[p].first  %= M;
                ways[p].second += ways[p - b].second;
                ways[p].second %= M;
            }
            else {
                ways[p].second += (ways[p - b].first + ways[p - b].second);
                ways[p].second  %= M;
            }
        }
    }

    printf("%lld\n", ways[n].second);

    return 0;
}
コード例 #7
0
ファイル: p116b.c プロジェクト: hacatu/project-euler
uint64_t cways(uint64_t length, uint64_t a, uint64_t b){
	uint64_t c = 0;
	for(uint64_t i = a; i <= b; ++i){
		c += ways(length, i);
	}
	return c - (b - a + 1);
}
コード例 #8
0
ファイル: HW10-3.cpp プロジェクト: DBlackKat/c-work
int main()
{
	int n,S;
	scanf("%d",&n);
	S=ways(n);
	printf("%d",S);
}
コード例 #9
0
ファイル: demonetization.c プロジェクト: TheAlgorithms/C
int main()
{
    int m;
    int t;
    int n;

    printf("Number of coins? ");
    scanf("%d", &m);
    int coin[m], i;
    for(i=0; i<m; i++)
    {
        printf("coin? ");
        scanf("%d", &coin[i]);
    }

    printf("---- your requests --- \n");
    while(1)
    {
        printf("amount? exit(0) ");
        scanf("%d", &n);
        if (!n)
        {
            break;
        }
        printf("%d\n", ways(n, coin, m));
    }
    return 0;
}
コード例 #10
0
int main(){
	auto primes = pe::PrimeSieve<2000>::make_vector();
	int i = 10;
	while(ways(i, primes) < 5000)
		i++;
	std::cout << i << std::endl;
	return 0;
}
コード例 #11
0
int main()
{
    memset(memo, -1, sizeof(memo));

    int n;
    while (scanf("%d", &n) != EOF)
        printf("%d\n", ways(0, n));

    return 0;
}
コード例 #12
0
ファイル: precountways.c プロジェクト: Garvit/code-backup
int ways(int n,int m)
{
    if(n==0 || m==0)
    {
        return 1;
    }

    return ways()


}
コード例 #13
0
int main()
{
	int i;
	
	printf("Hi, Do you wanna know how much different\nway that you can climb\n");
	printf("Enter stair numbers>>");
	scanf("%d",&i);
	printf("In Total => you have %d different ways.\n",ways(i));
	
	return 0;
}
コード例 #14
0
ファイル: 9-1.cpp プロジェクト: talentlei/CTCI150
int stairsWays(int n){
  if(n<1) return 0;
  vector <int > ways(n);
  ways[0] = 1;
  ways[1] = ways[0]+1;
  ways[2] = ways[0]+ways[1]+1;
  int i=3; 
  while(i<n)
    ways[i] = ways[i-1]+ways[i-2]+ways[i-3];
  return ways[n-1];
}
コード例 #15
0
int ways(int type, int value)
{
    // 1 jeito: Não usa nenhuma moeda
    if (value == 0)
        return 1;

    // Não existem moedas negativas
    if (value < 0)
        return 0;

    // Só existe 5 moedas
    if (type >= 5)
        return 0;

    // Já estava pré-calculado
    if (memo[type][value] != -1)
        return memo[type][value];

    memo[type][value] = ways(type + 1, value) + ways(type, value - coinValue[type]);

    return memo[type][value];
}
コード例 #16
0
ファイル: CoinSums.cpp プロジェクト: mammothb/project-euler
void CoinSums()
{
  uint64_t mod = 1000000007;
  auto amount = 200;
  std::vector<int> coin_sizes = {1, 2, 5, 10, 20, 50, 100, 200};
  std::vector<uint64_t> ways(amount + 1, 0);
  ways[0] = 1;
  for (auto coin : coin_sizes) {
    for (auto j = coin; j <= amount; ++j) {
      ways[j] = (ways[j] + ways[j - coin]) % mod;
    }
  }
  std::cout << ways[amount] << std::endl;
}
コード例 #17
0
int main()
{
    int coin[7]= {1,2,5,10,20,50,100},i,j,x,c;
    x=100;
    vector<long long> ways(x+1,0);
    ways[0]=1;
    for (i=0; i<7; i++)
    {
        c=coin[i];
        for (j=c; j<=x; j++)
            ways[j]+=ways[j-c];
    }
    cout<<ways[100]<<endl;
}
コード例 #18
0
ファイル: Euler31.cpp プロジェクト: Eppie/euler
int solve31() {
	int target = 200;
	vector<int> coins = { 1, 2, 5, 10, 20, 50, 100, 200 };
	vector<int> ways( target + 1, 0 );
	ways[0] = 1;

	for( int coin : coins ) {
		for( int j = coin; j <= target; j++ ) {
			ways[j] += ways[j - coin];
		}
	}

	return ways[200];
}
コード例 #19
0
ファイル: Unique_Paths.cpp プロジェクト: littleDing/leetcode
 int uniquePaths(int m, int n) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     if(m==0||n==0) return 0;
     vector<vector<int> > ways(m,vector<int>(n,0));
     for(int i=0;i<m;++i) ways[i][0]=1;
     for(int j=0;j<n;++j) ways[0][j]=1;
     for(int i=1;i<m;++i){
         for(int j=1;j<n;++j){
             ways[i][j]=ways[i-1][j]+ways[i][j-1];
         }
     }
     return ways[m-1][n-1];
 }
コード例 #20
0
ファイル: DecodeWays.cpp プロジェクト: suifengls/LeetCode
    int numDecodings(string s) {
	if(s.empty() || s == "0")
	    return 0;
	vector<int> ways(s.size()+1, 1);
	for(int i = s.size()-1; i >= 0; --i)
	{
	    if(s[i] == '0')
		ways[i] = 0;
	    else
		ways[i] = ways[i+1];
	    if(i+1 < s.size() && ((s[i] == '1') || (s[i] == '2' && s[i+1] - '0' <= 6)))
		ways[i] += ways[i+2];
	}
	return ways[0];
    }
コード例 #21
0
ファイル: main.cpp プロジェクト: kayrick/projecteuler
long count (int tsize)
{
  std::vector<long> ways(size + 1);
  int min = 1;
  int max = size / tsize;
  int nways = 0;
  for (int i = 0; i < tsize; i++)
    {
      ways[i] = 1;
    }
  for (int i = tsize; i <= size; ++i)
    {
      ways[i] = ways[i-1] + ways[i - tsize];
    }
  return ways[size] - 1;
}
コード例 #22
0
ファイル: decode-ways.cpp プロジェクト: mengjiaowang/leetcode
 int numDecodings(string s) {
     if(s.size() == 0) return 0;
     if(s[0] == '0') return 0;
     for(int i = 0; i != s.size(); ++i){
         if(s[i] < '0' || s[i] > '9') return 0;
     }
     vector<int> ways(s.size()+1,0);
     ways[0] = 1;
     ways[1] = 1;
     for(int i = 2; i <= s.size(); ++i){
         int v1 = s[i-1] - '0';
         int v2 = (s[i-1] - '0') + 10 * (s[i-2] - '0');
         if(v1 != 0) ways[i] += ways[i-1];
         if(v2 > 9 && v2 <= 26) ways[i] += ways[i-2];
     }
     return ways[s.size()];
 }
コード例 #23
0
 int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     if(obstacleGrid.size()==0||obstacleGrid[0].size()==0) return 0;
     int n=obstacleGrid.size(),m=obstacleGrid[0].size();
     vector<vector<int> > ways(n,vector<int>(m,0));
     ways[0][0]=1-obstacleGrid[0][0];
     for(int i=1;i<n;++i) ways[i][0]=(1-obstacleGrid[i][0])*ways[i-1][0];
     for(int j=1;j<m;++j) ways[0][j]=(1-obstacleGrid[0][j])*ways[0][j-1];
     for(int i=1;i<n;++i){
         for(int j=1;j<m;++j){
             if(obstacleGrid[i][j]==0)
                 ways[i][j]=ways[i-1][j]+ways[i][j-1];
         }
     }
     return ways[n-1][m-1];
 }
コード例 #24
0
ファイル: DecodeWays.cpp プロジェクト: qiaoyiX/leetcode
 int numDecodings(string s) {
     int size = s.size();
     if(!size)
         return 0;
     char pre = s[0];
     vector<int> ways(size);
     if(s[0] != '0')
         ways[0] = 1;
     else
         return 0;
     for(int i = 1; i < size; i++) {
         if(s[i] == '0') {
             if(s[i-1] == '1' || s[i-1] == '2') {
                 if(i>1) {
                     ways[i] = ways[i-2];
                 }
                 else
                     ways[i] = 1;
             }
             else {
                 return 0;
             }
         }
         else {
             if(s[i-1] == '0' || s[i-1] > '2') {
                 ways[i] = ways[i-1];
             }
             else {
                 if(s[i-1] == '2' && s[i] >='7') {
                     ways[i] = ways[i-1];
                 }
                 else {
                     ways[i] = ways[i-1];
                     if(i > 1) {
                         ways[i] += ways[i-2];
                     }
                     else {
                         ways[i]++;
                     }
                 }
             }
         }
     }
     return ways[size - 1];
 }
コード例 #25
0
ファイル: 091.cpp プロジェクト: JiaxiangZheng/LeetCode
 int numDecodings(string s) {
     if(s.size() == 0)
         return 0;
     vector<int> ways(s.size() + 2,1);//多出来的两个作为占位符,避免程序内判断是否超过size
     for(int i = s.size() - 1; i >= 0; --i)
     {
         //self
         if(s[i] == '0')
             ways[i] = 0;
         else
             ways[i] = ways[i+1];
         //self and next
         if( i + 1 < s.size() && ((s[i] == '1' || (s[i] == '2' && s[i + 1] <= '6')))) {
             ways[i] += ways[i + 2];
         }
     }
     return ways[0];
 }
コード例 #26
0
ファイル: Euler77.cpp プロジェクト: Eppie/euler
int solve77() {
	int limit = 100;
	auto primes = sieve( 100 );
	vector<int> ways( limit, 0 );
	ways[0] = 1;

	for( int prime : primes ) {
		for( int j = prime; j <= limit; ++j ) {
			ways[j] += ways[j - prime];
		}
	}

	for( int i = 0; i < limit; ++i ) {
		if( ways[i] > 5000 ) {
			return i;
		}
	}

	return -1;
}
コード例 #27
0
int Solution::uniquePaths(int m, int n)
{
	vector<int> ways(m);
	vector<int> ways1;
	
	for (int j = n - 1; j >= 0; j--)
	{
		ways = vector<int>(m, 0);
		if (j == n - 1)
			ways[m - 1] = 1;
		for (int i = m - 1; i >= 0; i--)
		{
			if (i + 1 < m)
				ways[i] += ways[i + 1];
			if (j + 1 < n)
				ways[i] += ways1[i];
		}
		ways1 = ways;
	}
	
	return ways[0];
}
コード例 #28
0
ファイル: 499theMazeIII.cpp プロジェクト: vincivans/LeetCode
 string findShortestWay(vector<vector<int>>& maze, vector<int>& ball, vector<int>& hole) {
     int m = maze.size(), n = maze[0].size();
     vector<vector<int> > dis(m, vector<int>(n, INT_MAX));
     vector<vector<string> > ways(m, vector<string>(n, ""));
     priority_queue<pair<int, int>, vector<pair<int,int> >,cmp> pq;
     pq.push({ball[0]*n+ball[1], 0});
     dis[ball[0]][ball[1]] = 0;
     while(!pq.empty()){
         auto cur = pq.top();
         pq.pop();
         int x = cur.first/n, y = cur.first%n;
         if(cur.second > dis[x][y]) continue;
         if(x==hole[0] && y==hole[1]) return ways[x][y];
         for(int i = 0; i < 4; ++i){
             int xNew = x, yNew = y, step = 0;
             string trys = ways[x][y]+dirStr[i];
             while(xNew+dir[i].first>=0 && yNew+dir[i].second>=0 && xNew+dir[i].first<m && yNew+dir[i].second<n && maze[xNew+dir[i].first][yNew+dir[i].second]!=1){
                 xNew += dir[i].first;
                 yNew += dir[i].second;
                 ++step;
                 if(xNew==hole[0] && yNew==hole[1]) break;
             }
             //xNew -= dir[i].first;
             //yNew -= dir[i].second;
             if(step==0) continue;
             if(dis[x][y]+step < dis[xNew][yNew]){
                 dis[xNew][yNew] = dis[x][y]+step;
                 ways[xNew][yNew] = trys;
                 pq.push({xNew*n+yNew, dis[xNew][yNew]});
             }
             else if(dis[x][y]+step == dis[xNew][yNew]){
                 if(trys < ways[xNew][yNew]) ways[xNew][yNew] = trys;
             }
         }
         
     }
     return "impossible";
 }
コード例 #29
0
    int findTargetSumWays(vector<int>& nums, int S) {

        /**
         *  DP Formula:
         *
         *  Let ways[i][j] denotes the number of ways to sum up j using
         *  the first i elements.
         *
         *  ways[i][j] = ways[i - 1][j - num[i]] +  # the sum of the first i - 1 elements is j + num[i]
         *               ways[i - 1][j + nums[i]]   # the sum of the first i - 1 elements is j - num[i]
         */

        int count_num = nums.size();
        if (count_num == 0) {
            return 0;
        }

        std::vector<std::unordered_map<int, int>> ways(
            count_num, std::unordered_map<int, int>());

        ways[0][nums[0]] += 1;
        ways[0][-nums[0]] += 1;

        for (int i = 1 ; i < count_num ; ++i) {
            int num = nums[i];

            for (const auto& pair : ways[i - 1]) {
                int sum = pair.first;
                int way = pair.second;

                ways[i][sum + num] += way;
                ways[i][sum - num] += way;
            }
        }

        return ways[count_num - 1][S];
    }