为什么顺序不行啊
查看原帖
为什么顺序不行啊
151712
一架飞机楼主2020/10/11 22:16

全WA

#include<bits/stdc++.h>
using namespace std;
const int M=1e4+5;
struct node{
	int p,t;
}work[M];
int dp[M];
vector<int> cnt[M];
int main(){
	int n,k;scanf("%d%d",&n,&k);
	for(int i=1;i<=k;i++)
		scanf("%d%d",&work[i].p,&work[i].t),cnt[work[i].p+work[i].t-1].push_back(i);
	for(int i=1;i<=n;i++){
		if(!cnt[i].size())dp[i]=dp[i-1]+1;
		else{
			for(int j=0;j<cnt[i].size();j++){
				dp[i]=max(dp[work[cnt[i][j]].p-1],dp[i]);
			}
		}
	}
	printf("%d",dp[n]);
	return 0;
}

AC(倒序)

#include<bits/stdc++.h>
using namespace std;
const int M=1e4+5;
struct node{
	int p,t;
}work[M];
int dp[M];
vector<int> cnt[M];
int main(){
	int n,k;scanf("%d%d",&n,&k);
	for(int i=1;i<=k;i++)
		scanf("%d%d",&work[i].p,&work[i].t),cnt[work[i].p].push_back(i);
	for(int i=n;i>=1;i--){
		if(!cnt[i].size())dp[i]=dp[i+1]+1;
		else{
			for(int j=0;j<cnt[i].size();j++){
				dp[i]=max(dp[work[cnt[i][j]].t+i],dp[i]);
			}
		}
	}
	printf("%d",dp[1]);
	return 0;
}
2020/10/11 22:16
加载中...