算法设计与分析---动态规划实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; } 测试截图: