为什么最后不能直接输出最大时间的dp值,而是要全部找一遍最大值
WA代码
#include<bits/stdc++.h>
//#define int long long
#define IN(x) freopen(#x".in","r",stdin)
#define OUT(x) freopen(#x".out","w",stdout)
template<class T=int>
inline T read(){
T x=0; bool sgn=0; char c=0;
for(;!isdigit(c);c=getchar())sgn|=(c=='-');
for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
return sgn?-x:x;
}
inline void write(char c){putchar(c);}
template<class T>
inline void write(T x){
static char c[40]; unsigned p=0;
if(x<0)x=-x,putchar('-');
do c[++p]=(x%10)^48,x/=10; while(x);
while(p)putchar(c[p--]);
}
template<class T,class ...U>
inline void write(T x,U ...t){
write(x),write(t...);
}
using namespace std;
const int N=1e4+10;
int n;
typedef pair<int,int> pii;
pii a[N];
int f[N];
signed main(){
while(cin>>n){
memset(f,0,sizeof f);
for(int i=1;i<=n;++i)cin>>a[i].second>>a[i].first;
sort(a+1,a+1+n);
for(int i=1;i<=n;++i){
for(int j=a[i].first;j;--j)
f[j]=max(f[j],f[j-1]+a[i].second);
}
cout<<f[a[n].first]<<endl;
}
return 0;
}
AC代码
#include<bits/stdc++.h>
//#define int long long
#define IN(x) freopen(#x".in","r",stdin)
#define OUT(x) freopen(#x".out","w",stdout)
template<class T=int>
inline T read(){
T x=0; bool sgn=0; char c=0;
for(;!isdigit(c);c=getchar())sgn|=(c=='-');
for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
return sgn?-x:x;
}
inline void write(char c){putchar(c);}
template<class T>
inline void write(T x){
static char c[40]; unsigned p=0;
if(x<0)x=-x,putchar('-');
do c[++p]=(x%10)^48,x/=10; while(x);
while(p)putchar(c[p--]);
}
template<class T,class ...U>
inline void write(T x,U ...t){
write(x),write(t...);
}
using namespace std;
const int N=1e4+10;
int n;
typedef pair<int,int> pii;
pii a[N];
int f[N];
signed main(){
while(cin>>n){
memset(f,0,sizeof f);
for(int i=1;i<=n;++i)cin>>a[i].second>>a[i].first;
sort(a+1,a+1+n);
int ans=0;
for(int i=1;i<=n;++i){
for(int j=a[i].first;j;--j)
f[j]=max(f[j],f[j-1]+a[i].second);
}
for(int i=0;i<=a[n].first;++i)ans=max(ans,f[i]);
cout<<ans<<endl;
}
return 0;
}