Hdu2553N皇后问题
思路:递归逐个去试
#include <bits/stdc++.h>
using namespace std;
int N;
int queenpos[100];
void NQueen(int k)
{
int i;
if(k==N){
for(i=0;i<N;i++)
cout<<queenpos[i]+1<<" ";
cout<<endl;
return;
}
for(i=0;i<N;i++){
int j;
for(j=0;j<k;j++){
if(queenpos[j]==i||abs(queenpos[j]-i)==abs(k-j)){
break;
}
}
if(j==k){
queenpos[k]=i;
NQueen(k+1);
}
}
}
int main()
{
cin>>N;
NQueen(0);
return 0;
}
这是输出皇后位置的代码,输出种数只需改动一点即可
放苹果
思路:考虑有盘子空和有苹果多的情况,递归
#include <bits/stdc++.h>
using namespace std;
bool powe(int m,int n)
{
if(n==1||m==0)
return 1;
if(n>m)
return powe(m,m);
return powe(m,n-1)+powe(m-n,n);
}
int main()
{
int n,m;
cin>>m>>n;;
cout<<powe(m,n);
return 0;
}
HDU1028 Ignatius and the Princess III
其实和放苹果一样,不过数据太大要用到记忆化递归
/* HDU1028 Ignatius and the Princess III */
#include <stdio.h>
#include <string.h>
#define N 160
long long a[N + 1][N + 1];
long long ways(int m, int n)
{
if(a[m][n])
return a[m][n];
else {
if(m == 0 || n == 1)
return a[m][n] = 1;
else if(n > m)
return a[m][n] = ways(m, m);
else
return a[m][n] = ways(m - n, n) + ways(m, n - 1);
}
}
int main()
{
memset(a, 0, sizeof(a));
int n;
while(~scanf("%d", &n))
printf("%lld\n", ways(n, n));
return 0;
}