嘟!数字三角形 W WW WWW集合!
哔!数字三角形全体集合!
数字三角形!到!
数字三角形W!到!
数字三角形WW!到!
数字三角形WWW!到!
--------------------------------------------------------------------------------------------------------------------------------------------------------
数字三角形,一个灰常灰常典型的动规题,是一道灰常灰常水的动规题,
1220 数字三角形
如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,使路径上的值最大。

第一行是数塔层数N(1<=N<=100)。
第二行起,按数塔图形,有一个或多个的整数,表示该层节点的值,共有N行。
输出最大值。
5
13
11 8
12 7 26
6 14 15 8
12 7 13 24 11
86
话不多说上代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int a[110][110]={0},n;
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-1;i>=1;--i)
for (int j=1;j<=i;j++)
a[i][j]=max(a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]);
cout<<a[1][1];
return 0;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------
重点说的是后三个转换型的题,我们先跳过 数字三角形W ,先来看数字三角形WW和WWW;
其实这两道题也是水题,先看题目:
193 数字三角形WW
数字三角形必须经过某一个点,使之走的路程和最大
第1行n,表示n行
第2到n+1行为每个的权值
程序必须经过n div 2,n div 2这个点
最大值
2
1
1 1
2
n <=25
要求必须经过(n/2,n/2)这个点的话,那我们只需把这个点的值先加上一个较大的数,
最后只需给结果减去你给它加上的值就好了,水题直接上代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int a[110][110]={0},n;
bool f[110][110]={0};
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=i;j++)
{
cin>>a[i][j];
}
a[n/2][n/2]+=5000;
for (int i=n-1;i>=1;--i)
for (int j=1;j<=i;j++)
a[i][j]=max(a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]);
cout<<a[1][1]-5000;
return 0;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------
2198 数字三角形WWW
数字三角形必须经过某一个点,使之走的路程和最大
第1行n,表示n行
第2到n+1行为每个的权值
第n+2行为两个数x,y表示必须经过的点
最大值
2
1
1 1
1 1
2
n<=25
这题思路与WW一样一样滴,只是把必走的点变成了(x,y),
上代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int a[110][110]={0},n,x,y;
bool f[110][110]={0};
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=i;j++)
cin>>a[i][j];
cin>>x>>y;
a[x][y]+=5000;
for (int i=n-1;i>=1;--i)
for (int j=1;j<=i;j++)
a[i][j]=max(a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]);
cout<<a[1][1]-5000;
return 0;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------
到了最重点的题:数字三角形W,这个题一开始我并没有想出较简单做法,后来敬爱的学哥学姐教会了我,因为毕竟我也是个蒟蒻啊...具体做法在代码中解释吧。
2189 数字三角形W
数字三角形
要求走到最后mod 100最大
第1行n,表示n行
第2到n+1行为每个的权值
mod 100最大值
2
1
99 98
99
n<=25
代码:
//我是用的倒推的思路做的,顺推其实思路一样,转换一下就好,这里只给出倒推得代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[26][26]={0};
bool f[26][26][100]={0};
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=1;i<=n;i++) //这一步的代码是为了将最后一排的所有数存下来
f[n][i][a[n][i]]=true;
for (int i=n-1;i>=1;--i) //这里是主要过程,思路:将所有的可能性mod100都存下来,
for (int j=1;j<=i;j++)
for (int k=0;k<=99;k++)
{
if (f[i+1][j][k])
f[i][j][(k+a[i][j])%100]=true;
if (f[i+1][j+1][k])
f[i][j][(k+a[i][j])%100]=true;
}
for (int k=99;k>=0;--k) //找出所有可能性中最大的可能,输出,这个题就AC咯、
if (f[1][1][k])
{
cout<<k;
return 0;
}
}
嘟!数字三角形 W WW WWW集合!的更多相关文章
- 93.数字三角形W(深搜)
2189 数字三角形W 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 数字三角形 要求走到最后mod 10 ...
- 2189 数字三角形W
2189 数字三角形W 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 数字三角形要求走到最后mod 100最大 输入描述 ...
- 数字三角形W(加强版) codevs 2189
2189 数字三角形W 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 数字三角形 要求走到最后mod 100最大 输入描述 Inpu ...
- 数字三角形W
题目描述 Description 数字三角形 要求走到最后mod 100最大 输入描述 Input Description 第1行n,表示n行 第2到n+1行为每个的权值 输出描述 Output De ...
- [CODEVS] 2189 数字三角形W
数字三角形 要求走到最后mod 100最大 可达性DP(好像是这样叫) 用bool数组f[i][j][k]表示 位置(i,j)能否得到k(mod 100意义下) 转移条件 f[i][j][k]=f[i ...
- codevs2189数字三角形w——最优性转化
题目:http://codevs.cn/problem/2189/ 通过增加一维,将最优性转化为可行性. 代码如下: #include<iostream> #include<cstd ...
- Codevs 数字三角形 问题合集
1220 数字三角形 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得 ...
- codevs 数字三角形集结
添在前面的一句话:初学DP,若有错误,请指出,不能误人子弟,欢迎大家提出意见.水平不高,博客写的比较粗糙,代码也挺丑,请见谅. 最原始的数字三角形: 1220 数字三角形 时间限制: 1 s 空间 ...
- [CODEVS] 2193 数字三角形WW
数字三角形必须经过某一个点,使之走的路程和最大 从必须经过的点,向上向下分别DP两次的和即为答案. 还有一种思路是把和必须经过点同一行的设为-INF,这样就一定(大概)不会选择它们了. //Write ...
随机推荐
- 1.AJAX简介
没有AJAX会怎么样?普通的ASP.Net每次执行服务端方法的时候都要刷新当前页面,比如实现显示服务器时间.每次都要刷新页面的坏处:页面刷新打断用户操作.速度慢.增加服务器的流量压力.如果没有AJAX ...
- 转:阿里旺旺导致python安装包失败的解决办法
我以前使用web.py没事,今天运行时报错, mimetypes.init() # try to read system mime.types File "D:\ProgramFiles\p ...
- 数据结构(树链剖分,堆):HNOI 2016 network
2215. [HNOI2016]网络 ★★★☆ 输入文件:network_tenderRun.in 输出文件:network_tenderRun.out 简单对比时间限制:2 s 内存 ...
- 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...
- SVM原理(1)
SVM即支持向量机,是一种机器学习内的二类分类方法,是有监督学习方法. 首先我们需要建立一个分类任务: 首先考虑线性可分的情况:(所谓线性可分就是在N维空间上的两类点,可以用N-1个未知数的函数(超平 ...
- POJ 3414 Pots ( BFS , 打印路径 )
题意: 给你两个空瓶子,只有三种操作 一.把一个瓶子灌满 二.把一个瓶子清空 三.把一个瓶子里面的水灌到另一个瓶子里面去(倒满之后要是还存在水那就依然在那个瓶子里面,或者被灌的瓶子有可能没满) 思路: ...
- "Storage Virtualization" VS "Software-Defined Storage"
http://www.computerweekly.com/blogs/StorageBuzz/2013/07/storage-virtualisation-vs-soft.html 这篇blog的目 ...
- 给tcpdump加点颜色看看
http://blog.csdn.net/voidccc/article/details/38797685
- C++中模板类使用友元模板函数
在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定 ...
- jq實現網頁個性title
<!DOCTYPE html> <html content="text/html; charset=UTF-8"> <title>tooltip ...