十二点开始得比赛,四点回来开始做(无奈)。
题目:
水题,本来想暴力的,后面突然想到之前做过有道有关状态转存图的题目,就想用那个去解。应该算是dp吧,算了下可能会超时,但暴力也会超,所以不如试一试。
思路:建立一个二维数组,每次输入一个新的数时,刷新一下。
大概意思就是如下图
后面wa了一次,主要原因出在更新数组上。
代码:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int dp[1005][1005];
int main()
{
int t;
int n,i,q,j,k;
scanf("%d",&t);
while(t--)
{
memset(dp,0,sizeof(dp));
int a[1005]={0};
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(j=i;j<=n;j++)
{
dp[i][j]=a[i];
}
for(k=i-1;k>0;k--)
{
if(dp[i][i]>dp[k][i])
{
for(j=i;j<=n;j++)
{
dp[k][j]=dp[i][i];
}
}
}
}
scanf("%d",&q);
while(q--)
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",dp[l][r]);
}
}
return 0;
}