hdu 2167 Pebbles (状态压缩dp)

题意:给你个n*n的矩阵让你随便取出几个数和最大  要求如果取出x则它周围八个数都不能再被取出

题目链接:点击打开链接

#include
#include

int dp[20][2000];//存第i行第j个合法状态所能得到的最大值
int state[2000];// 存行内无矛盾的合法状态
int map[20][20];// 存矩阵

int size,limit,n;

void in()// 求出所有合法状态并存到state[]中
{
    int i;
    size=0;
    limit=1<<15;
    for(i=0;i>1))!=0)return 0;
    if((state[i]&state[j])!=0)return 0;
    return 1;
}
int get(int x,int y)// 求出第x行第y个合法状态 所取数字之和
{
    int j,sum=0;
    for(j=0;jans)ans=dp[n-1][i];
    }
      return ans;
}

int main()
{
    int i,j;
    in();
    while(scanf("%d",&map[0][0])!=EOF)//输入第一个数字
    {
        n=1;
        char ch;
        while(scanf("%c",&ch),ch!='\n')//输入第一行求n
        {
            scanf("%d",&map[0][n++]);
        }
        for(i=1;i


你可能感兴趣的:(状态压缩DP)