标签:
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1244
DFS + 记忆化
#include <cstdio> #include <iostream> #include <cstring> #include <string> #define INF 0x3f3f3f3f using namespace std; int a[1005]; int sum[1005]; int l[25]; int dp[25][1005]; int n, m; int dfs(int i, int cur) { if(cur > n) return -INF; if(i==m+1) return 0; if(dp[i][cur]) return dp[i][cur]; int ret=-INF; for(int k=cur; k<n; k++) { ret = max(ret, dfs(i+1, k+l[i])+sum[k+l[i]]-sum[k]); } return dp[i][cur] = ret; } int main () { while(scanf("%d", &n) != EOF && n) { scanf("%d", &m); for(int i=1; i<=m; i++) { scanf("%d", &l[i]); } for(int i=1; i<=n; i++) { scanf("%d", &a[i]); sum[i] = sum[i-1] + a[i]; } printf("%d\n", dfs(1, 0)); memset(dp, 0, sizeof(dp)); } return 0; }
HDU 2746 ——Max Sum Plus Plus Plus
标签:
原文地址:http://www.cnblogs.com/AcIsFun/p/5356908.html