算法设计与分析---动态规划实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《算法设计与分析》作业作业一动态规划

For each set of data the program prints on the standard

output the length of the maximum-length common subsequence from the beginning of a separate line.

代码:

#include"cstdio"

#include"cstring"

#include"algorithm"

using namespace std;

#define inf 1200

#define loop(x,y,z) for(x=y;x

#define INF 99999999

#define ll long long,j;

char s1[inf],s2[inf];

int ans[inf][inf];

void init()

{

memset(ans,0,sizeof 0);

}

int getAns(int i,int j)

{

if(i<0||j<0)return 0;

return ans[i][j];

}

int calDP()

{

int len1=strlen(s1);

int len2=strlen(s2);

int i,j;

loop(i,0,len1)

loop(j,0,len2)

if(s1[i]==s2[j])

ans[i][j]=getAns(i-1,j-1)+1;

else

ans[i][j]=max(getAns(i-1,j),getAns(i,j-1));

return ans[len1-1][len2-1];

}

int main()

{

int i,j;

while(~scanf("%s%s",s1,s2))

{

printf("%d\n",calDP());

}

return 0;

}

●测试数据:

Sample Input

abcfbc abfcab

programming contest

abcd mnp

Sample Output

4

2

●测试截图:

●作业2-2:

01背包问题:

Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of

{

memset(ans,0,sizeof ans);

}

void calDP()

{

int i,j;

loop(i,0,bag+1)

{

loop(j,1,n+1)

if(i-volume[j]<0)

ans[i][j]=ans[i][j-1];

else

ans[i][j]=max(ans[i-volume[j]][j-1]+value[j],ans[i][j-1]);

}

}

int main()

{

int T;

int i,j;

scanf("%d",&T);

while(T--)

{

scanf("%d",&n);

scanf("%d",&bag);

init();

loop(i,1,n+1)

scanf("%d",&value[i]);

loop(i,1,n+1)

scanf("%d",&volume[i]);

calDP();

printf("%d\n",ans[bag][n]);

}

return 0;

}

测试截图:

相关文档
最新文档