64,642
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <time.h>
using namespace std;
#define n 10
void DP(int array[],int M)//动态规划
{
int i,j,a[n][n]={0};
for (i=0;i<n;i++)
{
a[i][i]=array[i];
}
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
a[i][j]=a[i][j-1]+array[j];//DP递归式
if (a[i][j]==M)
{
cout<<"从"<<i<<"到"<<j<<"项等于M"<<endl;
}
}
cout<<endl;
}
}
void DP2(int array[],int M)//贪心
{
int i=1,s=array[0],start=0,end=0;
while(1)
{
if (s<M)//如果小于M且下标i没到数组末尾,则继续求和,否则说明无满足题意的和式。
{
end=i;
s+=array[i++];
if (i>n)
{
break;
}
}
else if (s==M)
{
cout<<"从"<<start<<"到"<<end<<"项等于M"<<endl;
break;
}
else
{
s-=array[start];//如果和超过了M,舍弃前面的某几项,直到小于等于M为止
start++;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int array[n] = {0};
for (int i=0;i<n;i++)
{
array[i]=rand()%30;
cout<<array[i]<<" ";
}
cout<<endl;
DP(array,100);
DP2(array,100);
return 0;
}
int i = 1, j= 1, x = 0;
while( x!=m && j<=n )
if (x<m)
{
x += A[j];
j++;
}
eles
{
x -= A[i];
i++;
}
不懂分析..