NOI 1944:吃糖果 点击打开链接
N块巧克力,每天吃1or2个,求方案数
#include<iostream>
using namespace std;
int main()
{
int n,i;
cin>>n;
int dp[21];dp[1]=1;dp[2]=2;
for (i=3;i<=n;i++)
dp[i]=dp[i-1]+dp[i-2];
cout<<dp[n];
return 0;
}
NOI 2718:移动路线 点击打开链接
m*n的矩阵,蚂蚁从(1,1)到(m,n)共有多少种路线。蚂蚁只能向右或向上。矩阵大小为1时答案为1
#include<iostream>
using namespace std;
int dp[25][25]={0};
int main()
{
int m,n,i,j;
cin>>m;cin>>n;
for (i=1;i<=m;i++)
dp[i][1]=1;
for (i=1;i<=n;i++)
dp[1][i]=1;
for (i=2;i<=m;i++)
for (j=2;j<=n;j++)
dp[i][j]=dp[i-1][j]+dp[i][j-1];
cout<<dp[m][n]<<endl;
return 0;
}
过河卒 点击打开链接
从(0,0)走到(m,n),以C为中心的马的九个点不能走,求路总数。注意用longlong
#include <iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int n,m,x,y;
long long dp[27][27];//代表花费的最小时间
int main()
{
int i,j;
cin>>n>>m>>x>>y;
memset(dp,0,sizeof(dp));
for (i=0;i<=n;i++)
for (j=0;j<=m;j++)
{
if (i==0 && j==0)
dp[i][j]=1;
if ((i==x && j==y) || (abs(i-x)==1 && abs(j-y)==2) || (abs(i-x)==2 && abs(j-y)==1))
continue;
if (i>0)
dp[i][j]+=dp[i-1][j];
if (j>0)
dp[i][j]+=dp[i][j-1];
}
cout<<dp[n][m];
return 0;
}