UVA301- Transportation

来源:互联网 发布:df什么意思网络用语 编辑:程序博客网 时间:2024/06/18 15:24
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;


int s[100][3],n,b,m,p[100];
int s_max;
bool sign[100];
int cmp(const void *a,const void *b)
{
    int *p = (int *)a;
    int *q = (int *)b;
    return p[2]-q[2];
}
int dfs(int cur)
{
    if(cur==m)
    {
        int s_sum=0;
        for(int i = 0; i <= b; i++)
        {
            s_sum += p[i];
            //printf("---%d\n",p[i]);
        }
        if(s_max<s_sum) s_max=s_sum;
        return 0;
    }
    int s_num[100];
    memcpy(s_num,p,sizeof(p));
    int ok=0;
    for(int j=s[cur][0]; j<s[cur][1]; j++)
    {
        s_num[j]+=s[cur][2];
        if(s_num[j]>n)
        {
            ok=1;
            break;
        }
    }
    dfs(cur+1);
    if(!ok)
    {
        memcpy(p,s_num,sizeof(s_num));
        dfs(cur+1);
    }
}
int main()
{
    while(cin>>n>>b>>m)
    {
        if(!m&&!b&&!n) break;
        memset(p,0,sizeof(p));
        for(int i=0; i<m; i++)
        {
            cin>>s[i][0]>>s[i][1]>>s[i][2];
            //sign[i]=true;
        }
        //qsort(s,m,sizeof(s[0]),cmp);
        s_max=0;
        dfs(0);
        printf("%d\n",s_max);
    }
    return 0;
}
原创粉丝点击