1,枚举(买股票)
买卖股票的最佳时机
小算是一个"优秀又不甘平庸的韭菜",想要在股票市场上大赚一笔。这天小算又看中了一只潜力股。现在已知这只股票在n天内的价格为P0,P1,....,Pn-1,小算为了规避风险,只买了一股股票,小算在这n天内只有一次买卖机会,并且不能在买人股票当天或买入股票之前卖出股票,现在请你设计一个程序,计算出小算能获得的最大利润。
输入格式:
第1行为一个整数n,第2行为n个整数P0,P1,....,Pn-1,表示每天的股价。
输出格式:
输出一个整数,即最大利润。
数据范围:
1≤n≤10^5;
1≤pi≤10^4,i=0,1......,n-1。
样例输入:
6
5 8 1 4 6 5
样例输出:
5
代码:
cpp
#include <bits/stdc++.h>
using namespace std;
int n, a[1000],max1=0;
int main()
{
cin >> n;
for (int i = 0; i<n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if ((a[j] - a[i]) > max1)
max1 = a[j] - a[i];
}
}
cout << max1 << endl;
return 0;
}
1.2贪心:
cpp
#include <bits/stdc++.h>
using namespace std;
int n, a[1000],max1=0,min1=1000;
int main()
{
cin >> n;
for (int i = 0; i<n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
if (a[i] - min1>max1)max1 = a[i] - min1;
if (a[i] < min1)min1 = a[i];
}
cout << max1 << endl;
return 0;
}
map遍历
灌溉
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=150;
int a[N][N];
int b[N][N];
int m,n,x;
int c;
int main(){
cin>>n>>m;
cin>>x;
while(x--)
{
int x,y;
cin>>x>>y;
a[x][y]=1;
}
cin>>c;
while(c--){
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==1)
{
b[i][max(1,j-1)]=b[i][min(m,j+1)]=b[max(1,i-1)][j]=b[min(n,i+1)][j]=1;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(b[i][j]==1)
a[i][j]=b[i][j];
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==1)ans++;
}
}
cout<<ans<<'\n';
return 0;
}
模拟:扫雷:
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=150;
int mp[N][N];
int ans[N][N];
int main(){
int n,m;
cin >>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mp[i][j]==1){
ans[i][j]=9;
continue;
}
//扫描九宫格 计算方格周围的地雷的数量
for(int x=max(1,i-1);x<=min(n,i+1);x++){
for(int y=max(1,j-1);y<=min(m,j+1);y++){
if(mp[x][y]){
ans[i][j]++;
}
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
前缀和
cpp
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 100001;
int a[N], prefix[N];
int main()
{
ll n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= n; i++)//前缀和
{
prefix[i] = prefix[i - 1] + a[i];
}
ll q; cin >> q;
while (q--)//查询
{
ll b, c; cin >> b >> c;
cout << prefix[c] - prefix[b - 1] << '\n';
}
return 0;
}