原题地址 知识点:权值区间DP 解题报告 #include <cstdio> #include <algorithm> #include <iostream> #include <vector> using namespace std; struct P { int start, end, e; }; bool cmp(const P &a, const P &b) { return a.start < b.start; } int N, M, R; struct P a[1002]; int dp[1002]; int main() { scanf("%d %d %d", &N, &M, &R); int i,
原题地址 知识点:DP 解题报告 #include <cstdio> #include <algorithm> #include <iostream> using namespace std; // j部分定义成 31 时不行? 向前计算的时候有移动 0,..., 30次,共 31 个状态,因此要定义成 32 // d
原题地址 知识点:DP 解题报告 #include <cstdio> #include <string.h> int sum; int d[1000001]; int main() { scanf("%d", &sum); int i; // 初始化唯一确定方案数,d[1] 为 1 表示 1 的分解方案只有 1 种 d[1] = 1; for(i=2;i<=sum;++i) { // 找规律,当
原题地址 知识点:DP 解题报告 #include <cstdio> #include <algorithm> #include <iostream> using namespace std; int a[350][350]; int d[350][350]; int N; int main() { scanf("%d", &N); int i, j; for(i=0;i<N;++i) { for(j=0;j<i+1;++j) { scanf("%d", &a[i][j]); } } d[0][0] = a[0][0]; for(i=0;i<N-1;++i) { for(j=0;j<=i;++j) { // 注意这里记忆计算让重叠路径的值最大