| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
200题留念 留个程序哈#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
struct node_type{int l,r,val;}t;
typedef vector<node_type> vnode;
const int maxday=370;
vnode list[maxday];
int n;
int f[maxday][maxday];
int max(int a,int b){return a>b?a:b;}
int max(int a,int b,int c){return max(max(a,b),c);}
void Read(){
int i;
for(i=0;i<=365;i++)list[i].clear();
for(i=1;i<=n;i++)
scanf("%d%d%d",&t.l,&t.r,&t.val),
list[t.r].push_back(t);
}
void DP(){
int i,j,k;
memset(f,0,sizeof(f));
for(i=1;i<=365;i++){
for(k=0;k<list[i].size();k++){
for(j=1;j<i;j++)
f[i][j]=max(f[i][j],f[list[i][k].l-1][j]+list[i][k].val);
for(j=k+1;j<list[i].size();j++)
f[i][i]=max(f[i][i],f[list[i][k].l-1][list[i][j].l-1]+list[i][k].val+list[i][j].val);
}
for(j=1;j<=i;j++){
f[i][j]=max(f[i][j],f[i-1][j],f[i][j-1]);
f[j][i]=f[i][j];
}
}
printf("%d\n",f[365][365]);
}
int main(){
int x,y,d;
while(scanf("%d",&n)&&n){
Read();
DP();
}
}
解法与下面帖子的做法类似
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator