2189 数字三角形W

2189 数字三角形W

时间限制: 1 s

空间限制: 32000 KB

题目等级 : 黄金 Gold

题目描述 Description

数字三角形
要求走到最后mod 100最大

输入描述
Input Description

第1行n,表示n行
第2到n+1行为每个的权值

输出描述
Output Description

mod 100最大值

样例输入
Sample Input

2
1
99 98

样例输出
Sample Output

99

数据范围及提示
Data Size & Hint

n<=25

分类标签

Tags
点此展开

最后一维记录这个数%p可不可能到达

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN=26;
 6 int n;
 7 int a[MAXN][MAXN];
 8 bool f[MAXN][MAXN][101];
 9 int main()
10 {
11     scanf("%d",&n);
12     for(int i=1;i<=n;i++)
13         for(int j=1;j<=i;j++)
14             cin>>a[i][j];
15
16     for(int i=1;i<=n;i++)f[n][i][a[n][i]%100]=1;
17
18     for(int i=n-1;i>=1;i--)
19         for(int j=1;j<=i;j++)
20             for(int k=0;k<=99;k++)
21             f[i][j][k]=f[i+1][j][(k-a[i][j]+100)%100]||f[i+1][j+1][(k-a[i][j]+100)%100];
22
23     for(int k=100;k>=1;k--)
24         if(f[1][1][k]==1){cout<<k;break;}
25     return 0;
26 }
时间: 2024-08-26 12:11:15

2189 数字三角形W的相关文章

codevs2189数字三角形w——最优性转化

题目:http://codevs.cn/problem/2189/ 通过增加一维,将最优性转化为可行性. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,a[30][30]; bool f[30][30][105]; int main() { // memset(f,-2,sizeof f); scanf("%d",&

各种数字三角形

数字三角形 经典例题,有记忆化搜索,正推,逆推三种方法 如果记录路径,可以开一个数组记录状态是由哪个子状态推出来的 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; const int maxn = 200; int n,dp[maxn][maxn],value[maxn][

数字三角形合集

简单介绍 数字三角形这东西,出现了有一定的年头了.于是,出现了一些变种-- 眼下已知的题目 Codevs1220 数字三角形 这题是原版IOI1994啊-- f[i][j]=a[i][j]+max(f[i-1][j],f[i-1][j-1]). Codevs2193 数字三角形ww 和 Codevs2198 数字三角形www 改了.必须得经过一个点.而且2198是2193的数据规模上的加强版. 然而这并没有什么L用,仅仅需让必须经过的点的权值加上一个特别大的值,最后的结果再减去这个值即可了. 实

数字三角形2

题目描述 数字三角形 要求走到最后mod  100最大 输入 第1行n,表示n行  < =25 第2到n+1行为每个的权值 输出 mod  100最大值 样例输入 2 1 99 98 样例输出 99 #include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <ctime> #include <cstring> using namespace std; ty

数字三角形问题

1.数字三角形问题1: •    7 •   3 8 •  8 1 0 • 2 7 4 4 •4 5 2 6 5 •从第一层走到最后一层,每次向左下或右下走,求路径的最大权值和. 思路: •如果利用转移方程求解原问题? •f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j] •1.从上向下转移,即i从小到大? •2.从下向上转移,即i从大到小? •观察转移方程的性质 •因为第i行的解要由第i+1行的解得到,所以必须从下向上转移!! 代码: 1 #include <

动态规划--数字三角形问题

1. 问题描述 有一个像这样的数字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从顶点开始,每个数字向下层走只能有左下和右下两个方向,求出到达最后一行时最大的路径之和. Input 第1 行是数字三角形的行数n,1<= n <=100. 接下来n行是数字三角形各行中的数字.所有数字在0---99之间. 比如Input是: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 则output是30. 2. 问题求解 这是一个典型的动态规划求解问题,因为它符合动态

POJ_3176_Cow_Bowling(数字三角形)

描述 http://poj.org/problem?id=3176 给出一个三角形,每个点可以走到它下面两个点,将所有经过的点的值加起来,问最大的和是多少. 分析 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using std :: max; 5 6 const int maxn=355; 7 int a[maxn][maxn],f[maxn][maxn]; 8 int n; 9 10 i

tyvj 1044 数字三角形 记忆化搜索

数字三角形 Time Limit: 1 Sec  Memory Limit: 162 MB 题目连接 http://www.tyvj.cn/p/1044 Description 示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大. 每一步可沿左斜线向下或右斜线向下走: 1<三角形行数<25: 三角形中的数字为整数<1000: Input 第一行为N,表示有N行后面N行表示三角形每条路的路径权1≤n,m≤100000,0≤ai≤100000,1

七:动态规划-数字三角形

问题: 数字三角形  问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: (图3.1-1)输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形输出格式 最大总和(整数)样例输入573 88 1 02 7 4 44 5 2 6 5样例输出 30 方法一: 1 #include<stdio.h> 2