蓝桥杯 天天向上 C++算法提高 HERODING的蓝桥杯之路

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  A同学的学习成绩十分不稳定,于是老师对他说:“只要你连续4天成绩有进步,那我就奖励给你一朵小红花。”可是这对于A同学太困难了。于是,老师对他放宽了要求:“只要你有4天成绩是递增的,我就奖励你一朵小红花。”即只要对于第i、j、k、l四天,满足i<j<k<l并且对于成绩wi<wj<wk<wl,那么就可以得到一朵小红花的奖励。现让你求出,A同学可以得到多少朵小红花。
输入格式
  第一行一个整数n,表示总共有n天。第二行n个数,表示每天的成绩wi。
输出格式
  一个数,表示总共可以得到多少朵小红花。
样例输入
6
1 3 2 3 4 5
样例输出
6
数据规模和约定
  对于40%的数据,n<=50;
  对于100%的数据,n<=2000,0<=wi<=109。

解题思路:
这道题目困扰了我好久,但是我始终想不出如何构建dp,一位博主的讲解非常好,这里我列给大家:
们将 dp[i][j] 定义为以a[i]为起点,一直到数组结束为止,所有递增序列长度为j的序列的个数。
以数组 1 3 2 3 4 5为例:
dp[3][2]表示从第二个3为起始,一直到5,递增序列长度为2的个数。容易知道,满足这样的序列有2个,34 和 35。所以dp[3][2]=2;
有了上述的定义,我们就可以得出以下递推公式
dp[i][j]= ∑dp[k][j-1] (k>i,a[k]>a[i])
现在,我们只要确定了边界条件,就可以使用动态规划来解决这个问题了。
容易知道 dp[n-1][1]是边界条件,值为1。
为了让各位读者对动态规划的过程有更形象的了解,我就以1 3 2 3 4 5 为例,列出开头的几个步骤:
初始: dp[5][1]=1,其余dp[i][j]=0;
第二步 : dp[4][1]=1; dp[4][2]=dp[5][1]=1;
第三步: dp[3][1]=1; dp[3][2]=dp[4][1]+dp[5][1]=2; dp[3][3]=dp[4][2]=1;
第四步:dp[2][1]=1; dp[2][2]=dp[5][1]+dp[4][1]+dp[3][1]=3; dp[2][3]=dp[3][2]+dp[4][2]=3; dp[2][4]=dp[3][3]=1;
第五步: dp[1][1]=0; dp[1][2]=dp[4][1]+dp[5][1]=2 (a[k]要大于a[i])
dp[1][3]=dp[4][2]=1;
第六步: dp[0][1]=1; dp[0][2]=dp[1][1]+dp[2][1]+dp[3][1]+dp[4][1]+dp[5][1]=5; … dp[0][4]=dp[1][3]+dp[2][3]+dp[3][3] =1+3+1=5;
dp[i][4]中保存的就是,从i开始,一直到结束,递增序列长度为4的序列的个数。
因此,只要计算所有的dp[i][4]的和即可。
代码如下:

#include<bits/stdc++.h>

using namespace std;

long long dp[2001][2001];
int a[2001];

int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i ++){
		cin >> a[i];
	}
	memset(dp, 0, sizeof(dp));
	long long ans = 0;
	for(int i = n - 1; i >= 0; i --){
 		dp[i][1] = 1;
 		for(int j = i + 1; j < n; j ++){
 			if(a[j] > a[i]){
 				int k = 2;
 				while(1){
					if(dp[j][k - 1] == 0) {
						break;
					}
 					dp[i][k] = dp[i][k] + dp[j][k - 1];
 					k ++;
				}  				
			}
		}		
	}
	for(int i = 0; i < n; i ++){
		ans += dp[i][4];
	}	
	cout << ans << endl;	
	return 0;
}

这里有一个bug我始终无法理解,就是代码应该一模一样,不知道为什么下面这个有一个示例显示超时:

#include<bits/stdc++.h>

using namespace std;

long long dp[2001][2001];
int a[2001];

int main(){
	int n;
	cin >> n;
	for(int i = 0; i < n; i ++){
		cin >> a[i];
	}
	memset(dp, 0, sizeof(dp));
	long long ans = 0; 
	for(int i = n - 1; i >= 0; i --){
		dp[i][1] = 1;
		for(int j = i + 1; j < n; j ++){
			if(a[j] > a[i]){	
				int k = 2;
				while(1){
					if(dp[i][k - 1] == 0){
						break;
					}
					dp[i][k] = dp[i][k] + dp[j][k - 1];
					k ++;
				}
			}
		} 
	}
	for(int i = 0; i < n; i ++){
		ans += dp[i][4];
	}
	cout << ans << endl;
	return 0;
} 

明白的朋友烦请告知一声,感谢!

参考地址:https://blog.csdn.net/weixin_42185553/article/details/105879284

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GPT在NER(命名实体识别)任务上的表现相对较低。GPT是一个文本生成模型,而NER是一个序列标记任务,这两者的任务性质不同。为了弥补这种差距,研究人员提出了GPT-NER模型,将序列标记任务转换为GPT的生成任务。GPT-NER通过将需要提取的实体标记添加到生成的文本中来完成NER任务。此外,为了解决GPT-NER模型中的幻觉问题,研究人员还提出了自我验证策略,即提示GPT-NER询问自己提取的实体是否属于标记的实体标签。在多个广泛使用的数据集上,GPT-NER实现了与完全监督基线相当的性能,并且在小样本场景下表现优于监督模型。\[2\]\[3\] #### 引用[.reference_title] - *1* [GPT 应该存在吗?](https://blog.csdn.net/csdnnews/article/details/130939444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【论文精读】GPT-NER: Named Entity Recognition via Large Language Models](https://blog.csdn.net/HERODING23/article/details/130476395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HERODING77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值