C++动态规划
数塔:
#include <iostream>
using namespace std;
int a[1000][1000];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<i+1;j++){
cin>>a[i][j];
}
}
for(int i=n-2;i>=0;i--){
for(int j=0;j<i+1;j++){
a[i][j]+=a[i+1][j]>a[i+1][j+1]?a[i+1][j]: a[i+1][j+1];
}
}
cout<<a[0][0];
}
最大连续子序列
#include <iostream>
#include <algorithm>
using namespace std;
int a[1000];
int main(){
int n;int mx=0;
while(1){
mx=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
a[i]+=a[i-1]>0?a[i-1]:0;
if(a[i]>mx) mx=a[i];
}
cout<<mx;
}
}
馅饼(仿数塔):
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[13][1000];int x,y;
int main(){
int n;int mx=0;
while(1){
cin>>n;
for(int i=0;i<n;i++){
cin>>x>>y;
a[x+1][y]+=1;
if(y>mx) mx=y;
}
for(int i=mx-1;i>=0;i--){
for(int j=1;j<12;j++){
a[j][i]+=max(a[j-1][i+1],max(a[j][i+1],a[j+1][i+1]));
}
}
cout<<a[6][0];
}
}

浙公网安备 33010602011771号