首页 > 其他分享 >51nod 2180 争渡

51nod 2180 争渡

时间:2024-09-06 08:54:59浏览次数:4  
标签:51nod 线段 int 2180 复杂度 争渡 sum dp

争渡 原题链接

常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。 ——李清照《如梦令·常记溪亭日暮》

给出线段上界和下界,要在严格递增地在区间内选数,问到最后一条线段的方案数。

image

见上图,第 \(i\) 条线段 \(j\) 点的方案数为 \(i-1\) 条线段的 \(j-1\) 到 \(l[i-1]\) 的方案数的总和。

所以我们可以得到设状态为 dp[i][j] 前 i 条线段点数为 j 的方案数,我们也可以得到动态转移方程 \(dp[i][j]=\sum_{k=l[i-1]}^{j-1} dp[i-1][k]\)

但是这样做的时间复杂度有点高,那如何优化呢。

考虑使用前缀和优化,我们用 sum 数组将上方的求和储存起来,这样就不用每次都需要重复计算一次了。

总复杂度为 \(O(n\times M)\),\(M\) 为值域。

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
const int mod=998244353;
int n; 
int l[N],r[N];
int dp[205][N];
int sum[N];

int main(){
	ios::sync_with_stdio(false);
	cin>>n;
	
	for(int i=1;i<=n;i++){
		cin>>l[i]>>r[i];
	} 
	
	for(int i=l[1];i<=r[1];i++){//初始化方案数 
		dp[1][i]=1;
	}
	
	for(int i=0;i<=N;i++){//求前缀和 
		sum[i]=(sum[i-1]+dp[1][i])%mod;
	} 
	
	for(int i=2;i<=n;i++){//从第二个开始 
		for(int j=l[i];j<=r[i];j++){//O(1) 获取方案数 
			dp[i][j]=sum[j-1];
		}
		sum[0]=0;//初始化,重置数组 
		for(int j=0;j<=N;j++){//再次求前缀和 
			sum[j]=(sum[j-1]+dp[i][j])%mod;
		} 
	}
	long long ans=0;
	for(int i=l[n];i<=r[n];i++){//统计方案数 
		ans=(ans+dp[n][i])%mod;
	}
	cout<<ans;
    return 0;
}

标签:51nod,线段,int,2180,复杂度,争渡,sum,dp
From: https://www.cnblogs.com/sadlin/p/18399531

相关文章

  • 51nod 2842 城际旅行
    原题链接这题因为要求满足t时间内,所以用dp,不过我们的状态比较特殊,\(dp[i][j]\)表示到\(i\)点时经过\(j\)个点的最短时间,因为题目为DAG所以要用拓扑排序,每到一个点,枚举所有出边,更新出点的状态\(f[v][j+1]=min(f[v][j+1],f[u][j])\),最后的答案就是所有\(f[t][j]\let......
  • 51nod 1366 贫富差距
    51nod1366贫富差距这题题面挺抽象的,一个人与他所以的朋友的钱不能超过\(d\),问朋友链上钱最多的人的钱与钱最少的人的钱相差多少,求差距的最大值。如果两个人不属于同一个连通块那么差距可以无穷大,好了特殊情况解决了。然后为了使这个差距最大,那么对于每个朋友我们都取\(d\)......
  • 51nod 3179 绝世好题
    3179绝世好题他仅仅要求序列最长的长度,我们可以引用最长上升子序列的思想(有些隐蔽),设状态\(dp[i]\)为二进制第i位为1的最长序列长度,对于一个数10101\(dp[1],dp[3],dp[5]\)都应该加一,对他们的数值取个最大值,并将他们的状态与最大值比较更新。下列代码为上述思路:#includ......
  • 51nod 3010 The Captain
    暴力构图为\(O(n^2)\)无法实现,但可以发现有些边无用,可以先按x排序,第i号点与第i+1号点一定最近,所以建一条边,y坐标同理,然后跑最短路即可自动选择\(min(|x_1-x_2|,|y_1-y_2|)\)#include<bits/stdc++.h>usingnamespacestd;constlonglongINF=0x3f3f3f3f;constint......
  • 51nod 1204 Parity
    闲话虽然这题好像找不到原题了,但毋庸置疑地说这的确是并查集的好题。分析可以先对奇偶区间进行分析,当这个有偶数个1时,区间\(1-(left-1)\)一定与区间\(1-right\)的奇偶性相同。如此图\(3-4\)为偶区间,根据分析,\(1-2\)为奇区间。\(1-4\)也为奇区间。但如果填入的......
  • 51nod两问-Pinball等
    问题1-Pinball为什么这样解释的通,我看不懂什么意思?还有这个\(e\)在后面状态中没有体现。具体做法?为什么只有\([a_i,c_i]\)需要考虑?他可以往左边掉。那么从\(n\)开始掉又如何考虑Kamp手绘的图:这个图似乎就不满足了。不知道什么意思。这个思路怎么做。......
  • 51nod-3928方伯伯的玉米田
    https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338https://class.51nod.com/Html/Textbook/Problem.html#problemId=3928&textbookChapterId=725保证右端点为\(n\)是因为如果不是这样操作,可能导致后面的数大小关系发生变化,而如果保证了......
  • 51nod-3986-免费的馅饼
    https://class.51nod.com/Html/Textbook/Problem.html#problemId=3986&textbookChapterId=725https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338我们将馅饼表示为\((p_i,t_i)\),即一个平面直角坐标系上的点。我们把馅饼看成静止,人每次往......
  • 51nod-3976-最长序列
    https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338https://class.51nod.com/Html/Textbook/Problem.html#problemId=3976&textbookChapterId=725LIS是符号只有大于或小于,所以这道题就是LIS问题。状态设计同LIS,由于答案就是长度,所以就能知......
  • 51nod-基因匹配+luogu-【模板】最长公共子序列
    https://www.luogu.com.cn/problem/P1439https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338以上两个都是特例,一个是每个元素不重复,一个是每个元素均有5个。正确性说明参考:https://www.luogu.com.cn/article/1bcs9052由于一般情况可能出......