8462:大盗阿福
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int N;
cin>>N;
vector<int> v;
while(N--){
int n;
cin>>n;
v.push_back(n);
}
vector<int> dp(v.size(),0);
dp[0]=v[0];
for(int i=1;i<v.size();i++){
dp[i]=max(dp[i-2]+v[i],dp[i-1]);
}
cout<<dp[v.size()-1]<<endl;
}
return 0;
}
6045:开餐馆
不知道为什么通过不了
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int n,k;
cin>>n>>k;
vector<int>m,p;
int temp1=n,temp2=n;//the temp of n
while(temp1--){
int mm;
cin>>mm;
m.push_back(mm);
}
while(temp2--){
int mm;
cin>>mm;
p.push_back(mm);
}
vector<int> dp(n,0);
dp[0]=p[0];
int cur=0;//the current restaurant
for(int i=1;i<n;i++){
if(m[i]-m[cur]>k){
dp[i]=dp[i-1]+p[i];
cur=i;
}
else {
int lastdp=0;
if(cur-1>=0){
lastdp=dp[cur-1];
}
dp[i] = max(dp[i - 1], p[i]+lastdp);
}
}
cout<<dp[n-1]<<endl;
}
return 0;
}
网上找的C语言代码,提交上去可以,但是改成C++就WA了。
#include <iostream>
using namespace std;
int max(int a,int b){
return a>b?a:b;
}
int main(){
int T;
int m[110],p[110];
cin>>T;
while(T--){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>m[i];
}
for(int i=1;i<=n;i++){
cin>>p[i];
}
int dp[110];
int ans=0;
for(int i=1;i<=n;i++){
dp[i]=p[i];
for(int j=1;j<i;j++){
if(m[i]-m[j]>k){
dp[i]=max(dp[i],dp[j]+p[i]);
}
ans=max(ans,dp[i]);
}
}
cout<<ans<<endl;
}
return 0;
}