POJ1579

来源:互联网 发布:ppt圆环图编辑数据 编辑:程序博客网 时间:2024/06/09 13:08

水题,没看到半点dp的影子.强行算是DP的话,公式已经给出来了,直接写就行了.

#include <iostream>#include <cstring>#include <cstdio>using namespace std;int dp[25][25][25];int main(){    int i,j,k;    memset(dp,0,sizeof(dp));    for(i=0;i<=20;i++)    {        for(j=0;j<=20;j++)        {           dp[0][i][j]=1;           dp[i][0][j]=1;           dp[i][j][0]=1;        }    }    dp[1][1][1]=0;    for(i=1;i<=20;i++)    {        for(j=1;j<=20;j++)        {            for(k=1;k<=20;k++)            {                int tem;                if(i<j&&j<k)                {                    tem=dp[i][j][k-1]+dp[i][j-1][k-1]-dp[i][j-1][k];                    dp[i][j][k]=tem;                }                else                {                    tem=dp[i-1][j][k]+dp[i-1][j-1][k]+dp[i-1][j][k-1]-dp[i-1][j-1][k-1];                    dp[i][j][k]=tem;                }            }        }    }    //cout<<"YES"<<endl;    while(true)    {        int a,b,c;        cin>>a>>b>>c;        if(a==-1&&b==-1&&c==-1) break;        cout<<"w("<<a<<", "<<b<<", "<<c<<") = ";        if(a<=0||b<=0||c<=0)        {            cout<<1<<endl;            continue;        }        if(a>20||b>20||c>20)        {            cout<<dp[20][20][20]<<endl;            continue;        }        cout<<dp[a][b][c]<<endl;    }    return 0;}
0 0