基础动态规划题目基础动态规划题目
创始人
2025-01-08 17:05:41
0

目录

题目1: P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

 代码示例:

题目2: Common Subsequence

代码示例

题目3 :最长上升子序列

最长不下降子序列

最长上升子序列oj答案

题目1: P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles

P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1216

 代码示例:

// c++ 代码示例 #include  #include   using namespace std ;  int n,a[1005][1005],f[1005][1005] ;  int dfs(int x, int y) {     if (x == n) return a[x][y] ;     if (f[x][y] != -1) return f[x][y] ;     return f[x][y] = max(dfs(x + 1, y), dfs(x + 1, y + 1)) + a[x][y] ; }  int main() {     int n ;     cin >> n ;     for (int i = 1 ; i <= n ; i++)     {         for (int j = 1 ; j <= i ; j++)         {             cin >> a[i][j] ;         }     }     for (int i = 1 ; i <= n ; i++)     {         for (int j = 1 ; j <= i ; j++)         {             f[i][j] = -1 ;         }     }     cout << dfs(1, 1) ;     return 0 ; }
// c++ 代码示例  #include  #include  using namespace std ;  long long n, a[1005][1005] ; int main() {     cin >> n ;     for (int i = 1 ; i <= n ; i++)     {         for (int j = 1 ; j <= i ; j++)         {             cin >> a[i][j] ;         }     }     for (int i = n ; i >= 1 ; i--)     {         for (int j = 1 ; j <= i ; j++)         {             a[i][j] = a[i][j] + max(a[i + 1][j], a[i + 1][j + 1]);                              }     }     cout << a[1][1] ;     return 0 ;      }

 

// c++ 代码示例  #include  #include  #include  #include  #include  #include  using namespace std;  #define rint register int inline void read(int &x) {     x = 0;     int w = 1;     char ch = getchar();     while (!isdigit(ch) && ch != '-')     {         ch = getchar();     }     if (ch == '-')     {         w = -1;         ch = getchar();     }     while (isdigit(ch))     {         x = (x << 3) + (x << 1) + (ch ^ '0');         ch = getchar();     }     x = x * w; }  const int maxn = 1000 + 10;  int n, a[maxn][maxn], ans;  int main() {     read(n);     for (rint i = 1; i <= n; i++)     {         for (rint j = 1; j <= i; j++)         {             read(a[i][j]);             if (i == 1 && j == 1)             {                 // The top of the triangle                 continue;             }             if (j == 1)             {                 // Left boundary                 a[i][j] += a[i - 1][j];             }             else if (j == i)             {                 // Right boundary                 a[i][j] += a[i - 1][j - 1];             }             else             {                 // Middle elements                 a[i][j] += max(a[i - 1][j - 1], a[i - 1][j]);             }             ans = max(ans, a[i][j]);         }     }     cout << ans << endl;     return 0; }

题目2: Common Subsequence

Common Subsequence - HDU 1159 - Virtual Judge (vjudge.net)icon-default.png?t=N7T8https://vjudge.net/problem/HDU-1159

代码示例

// c++ 代码示例 int a[MAXN], b[MAXN], f[MAXN][MAXN] ;  int dp() {     for (int i = 1 ; i <= n ; i++)     {         for (int j = 1 ; j <= m ; j++)         {             if (a[i - 1] == b[j - 1])             {                 f[i][j] = f[i - 1][j - 1] + 1 ;             }             else             {                 f[i][j] = std::max(f[i - 1][j], f[i][j - 1]) ;             }         }     }     return f[n][m] ; }
// c++ 代码示例  #include  #include  #include  #include  #include  #include    using namespace std;   char a[1001], b[1001]; int dp[1001][1001], len1, len2;   void lcs(int i,int j) {     for(i=1; i<=len1; i++)     {         for(j=1; j<=len2; j++)         {             if(a[i-1] == b[j-1])                 dp[i][j] = dp[i-1][j-1] + 1;             else if(dp[i-1][j] > dp[i][j-1])                 dp[i][j] = dp[i-1][j];             else                 dp[i][j] = dp[i][j-1];         }     } }   int main() {     while(~scanf(" %s",a))     {         scanf(" %s", b);         memset(dp, 0, sizeof(dp));         len1 = strlen(a);         len2 = strlen(b);         lcs(len1, len2);         printf("%d\n", dp[len1][len2]);     }     return 0; }

题目3 :最长上升子序列

信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)icon-default.png?t=N7T8http://ybt.ssoier.cn:8088/problem_show.php?pid=1281

最长不下降子序列

//c++代码示例 # include  # include  using namespace std ; int n ; int a[1001] ; int f[1001] ; int mx = -1 ; int main() {     scanf("%d", &n) ;     for (int i = 1 ; i <= n ; i++)     {         scanf("%d", &a[i]) ;         f[i] = 1 ;     }     for (int i = 2 ; i <= n ; i++)     {         for (int j = i - 1 ; j >= 1 ; j--)         {             if (a[i] >= a[j])             {                 f[i] = max(f[i], f[j] + 1) ;             }         }     }     for (int i = 1 ; i <= n ; i++)     {         mx = max(mx, f[i]) ;     }     printf("%d", mx) ;     return 0 ;      }
//c++代码示例 # include  # include  using namespace std ; int n ; int a[1001] ; int f[1001] ; int mx = -1 ; int main() {     scanf("%d", &n) ;     for (int i = 1 ; i <= n ; i++)     {         scanf("%d", &a[i]) ;         f[i] = 1 ;     }     for (int i = n - 1 ; i >= 1 ; i--)     {         for (int j = i + 1 ; j <= n ; j++)         {             if (a[i] <= a[j])             {                 f[i] = max(f[i], f[j] + 1) ;             }         }     }     for (int i = 1 ; i <= n ; i++)     {         mx = max(mx, f[i]) ;     }     printf("%d", mx) ;     return 0 ;      }

最长上升子序列oj答案

//c++代码示例 # include  # include  using namespace std ; int n ; int a[1001] ; int f[1001] ; int mx = -1 ; int main() {     scanf("%d", &n) ;     for (int i = 1 ; i <= n ; i++)     {         scanf("%d", &a[i]) ;         f[i] = 1 ;     }     for (int i = n - 1 ; i >= 1 ; i--)     {         for (int j = i + 1 ; j <= n ; j++)         {             if (a[i] < a[j])             {                 f[i] = max(f[i], f[j] + 1) ;             }         }     }     for (int i = 1 ; i <= n ; i++)     {         mx = max(mx, f[i]) ;     }     printf("%d", mx) ;     return 0 ;      }

相关内容

热门资讯

终于清楚!碣石暗宝有挂吗(辅助... 终于清楚!碣石暗宝有挂吗(辅助挂)外挂透视辅助器(2021已更新)(哔哩哔哩)一、碣石暗宝有挂吗软件...
7分钟辅助挂!聚星扑克德州有假... 7分钟辅助挂!聚星扑克德州有假吗,fishpoker确实真的是有挂,技巧教程(有挂辅助挂)1、完成聚...
教程攻略!开心联盟怎么开挂(透... 教程攻略!开心联盟怎么开挂(透视)外挂透明挂辅助神器(2021已更新)(哔哩哔哩);开心联盟怎么开挂...
总算了解!!爱来游戏辅助(辅助... 总算了解!!爱来游戏辅助(辅助挂)透视辅助插件(2024已更新)(哔哩哔哩);爱来游戏辅助辅助器中分...
八分钟普及!赣南好友麻将有没有... 八分钟普及!赣南好友麻将有没有挂,pokerist确实真的是有挂,扑克教程(有挂科普)暗藏猫腻,小编...
2分钟辅助挂!小松宿松麻将有挂... 自定义雀神麻将辅牌器购买系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不...
揭秘!推大石有外挂么(透视辅助... 揭秘!推大石有外挂么(透视辅助)透明挂透视辅助神器(2020已更新)(哔哩哔哩)1、推大石有外挂么系...
今日百科!小宝跑得快有挂吗(辅... 今日百科!小宝跑得快有挂吗(辅助)外挂透明挂辅助助手(2026已更新)(哔哩哔哩);进入游戏-大厅左...
七分钟科普!潮汕汇app鱼虾蟹... 七分钟科普!潮汕汇app鱼虾蟹有挂吗,哈糖大菠萝十三张原来是真的有挂,揭秘教程(有挂秘笈);一、潮汕...
四分钟辅助挂!江西中至麻将有挂... 四分钟辅助挂!江西中至麻将有挂吗,微信小程序雀神辅助器安装包,详细教程(有挂修改器);四分钟辅助挂!...