今天随便写了一个joj1026 theStaircases ,题目不难,郁闷的是,本来dp的算法是对的,但是由于我申请的是int型的数组,最终导致了运算结果的上溢,输出竟然出现了负数,郁闷死我了,找了好久也没发现错在哪,哎是该补一补基础知识了。附代码如下:
#include <iostream>
#include <string>
using namespace std;
double dp[510][510];//dp[min][bricks]
int main()
{
memset(dp,0,sizeof(dp));
int i,j;
for(j=3;j<=500;j++)//bricks
{
int tmp=(j+1)/2-1;
for(i=tmp;i>=1;i--)//min
{
dp[i][j]=1;
for(int k=i+1;k<(j-i-k);k++)
{
dp[i][j]+=dp[k][j-i];
}
}
}
int bricks;
cin>>bricks;
while(bricks!=0)
{
double sum=0;
for(i=1;i<=((1+bricks)/2-1);i++)
{
sum+=dp[i][bricks];
//cout<<dp[i][bricks]<<endl;
}
printf("%.0lf\n",sum);
cin>>bricks;
}
return 0;
}