HDU 1565 方格取数(1) HDU 2167 Pebbles 基础状态压缩动态规划

两个题目都是一样的套路..开始学习状压DP,记录一下 。

先预处理状态,找到可行的所有状态,然后遍历所有可能性。

先找单行所有可行状态,然后在进行运算的时候判断是否与上一行冲突,不冲突说明是一种方案,记录一下。

附上HDU2167代码:

#include
#include
#define M 1<<16
int a[20][20],dp[20][20000];
int s[20000];

void  inti()//记录单行所有可取状态
{
	int k=0,i;
	for(i=0;i>=1;
	}
	return sum;
}

int main()
{
	char ch[10005];
	int r=0,c=0;
	int i,j,k;
	inti();
	while(gets(ch))
	{
		if(strcmp(ch,"")!=0)
		{
			int num=0;
			for(i=0;ch[i]!='\0';i++)
			{
				if(ch[i]==' ')
				{
					a[r][c++]=num;
					num=0;
				}
				else
					num=num*10+ch[i]-'0';
			}
			a[r][c]=num;
			r++;c=0;
		}
		else
		{
			int x=1<max)
							max=dp[i-1][k];
					}
					dp[i][j]+=max;
				}
			}
			int ans=0;
			for(i=0;s[i]ans)
					ans=dp[r-1][i];
			}
			printf("%d\n",ans);
			memset(a,0,sizeof(a));
			memset(dp,0,sizeof(dp));
			r=0;c=0;
		}
	}
	return 0;
}


你可能感兴趣的:(动态规划)