bzoj 4621: Tc605 动态规划

       动态规划的水平真的是太差了QAQ。。普及组的dp都不会了

       注意到结束后的数组一定是一些数字段,且数字前后相对顺序不变。同时可以得到某一个数字最多向前后延伸多少位。

      考虑对结束后的数组dp,令dp[i][j]表示到第i位,操作了j次的方案;由于次数限制,所以对于每一个数字段最多操作一次。考虑转移,假设第i位左右可以延伸到[l,r],那么枚举延伸的右端点k,显然dp[k][j]+=Σdp[p][j-1],l-1<=p

AC代码如下:

#include
#include
#include
#define N 505
#define mod 1000000007
using namespace std;

int n,m,a[N],dp[N][N];
int main(){
	scanf("%d%d",&n,&m);
	int i,j,k,l,r,now;
	for (i=1; i<=n; i++) scanf("%d",&a[i]);
	dp[0][0]=1;
	for (i=1; i<=n; i++){
		l=i; while (l>1 && a[l-1]

by lych

2016.8.3

你可能感兴趣的:(bzoj)