标签:排列 失败 学校 iostream 结束时间 输入 最大的 default 注意
#include<iostream>
#include<cstring>
using
namespace
std; //尝试所有可能的排列组合安排并更新最大价值
int
b[21],e[21],v[21],m,maxn,book[21],sumn,ed;
void
dfs(
int
p)
{
for
(
int
i=1;i<=m;i++){
if
(p==0) sumn=0;
if
(!book[i]){
if
(b[i]>=e[p]){book[i]=1;
sumn+=v[i];
if
(sumn>maxn) maxn=sumn;
dfs(i);
sumn-=v[i];
book[i]=0;}
}
}
}
int
main()
{
int
n,i,j,t;
cin>>t;
while
(t--){maxn=-1;
cin>>m;
memset
(book,0,
sizeof
(book));
memset
(e,0,
sizeof
(e));
memset
(b,0,
sizeof
(b));
for
(i=1;i<=m;i++)
cin>>b[i]>>e[i]>>v[i];
sumn=0,dfs(0);
cout<<maxn<<endl;
}
return
0;
}
#include<bits/stdc++.h>
using namespace std;
int dp[105];
struct tim
{
int s,e,w;
bool operator<(const tim &chs)const{
if(e!=chs.e) return e<chs.e;
else return s<chs.s;
}
};
int main()
{
int n,i,j,k,s,e,w,p,t;
cin>>t;
while(t--){tim m[30];
int maxn=-1;
memset(dp,0,sizeof(dp));
cin>>n;
m[0].e=0;
for(i=1;i<=n;++i)
cin>>m[i].s>>m[i].e>>m[i].w;
sort(m+1,m+1+n);
for(i=1;i<=n;++i){
int pd=0;
for(j=0;j<i;++j)
if(m[i].s>=m[j].e&&pd<dp[j]) pd=dp[j];
dp[i]=pd+m[i].w;
}
for(i=1;i<=n;++i) maxn=max(dp[i],maxn);
cout<<maxn<<endl;
}
return 0;
}
标签:排列 失败 学校 iostream 结束时间 输入 最大的 default 注意
原文地址:http://www.cnblogs.com/zzqc/p/6617617.html