首页 > 其他 > 详细

scauoj 17233 歌唱比赛

时间:2016-09-09 13:24:06      阅读:426      评论:0      收藏:0      [点我收藏+]

17233 歌唱比赛

时间限制:1000MS  内存限制:65535K
提交次数:8 通过次数:6 收入:37

题型: 编程题   语言: G++;GCC

Description

Alice很喜欢唱歌。他准备参加一个歌唱比赛。
Alice会唱N首歌曲,每一首歌都有演唱时间和音调。假设第i首歌的演唱时间为dura[i],音调为tone[i]。
Alice发现很难连续演唱不同音调的歌曲。当他唱完第i首歌之后准备唱第j首歌,他需要| tone[i]-tone[j] | 的时间去调整。
已知Alice只有时间T去表演。假设一开始Alice就能马上进入状态演唱任意一首歌,并且他每一次选歌都是任意的。现在Alice想知道在给定的时限内他最多能够演唱多少首歌曲。




输入格式

多样例,EOF结束。
对于每个样例,第一行为N。(1<=N<=15)
第二行有N个整数dura[i],表示每首歌的演唱时间。(dura[i]<=1000000)
第三行有N个整数tone[i],表示每首歌的音调。(tone[i]<=1000000)
第四行一个整数T,表示Alice的表演时间。



输出格式

每个样例输出一个整数,表示Alice在给定的时限内他最多能够演唱多少首歌曲。



输入样例

5
9 5 2 5 5
8 7 1 3 3
14



输出样例

3



来源

 Farmer 

作者

 201131000903

因为音调转化是费时间的,所以需要排个序,然后直接dfs就好了

技术分享
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <stack>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <queue>
#define cl(A) memset(A, 0, sizeof(A))
using namespace std;
typedef long long LL;
const int maxn = 1e5+5;
const int M = maxn*100;
const int mod = 1e9+7;
const double eps = 1e-7;
const int inf = 0x3f3f3f;
const LL INF = 1LL<<60;
const int N = 1e5 + 7;
int n;
LL T;
int ans;
struct node {
    int dura;
    int tone;
    bool operator < (const node&a)const {
        if(tone!=a.tone) {
            return tone<a.tone;
        } else return dura<a.dura;
    }
} si[20];
void init() {
    ans=0;
    for(int i = 0; i < n; i++) {
        scanf("%d",&si[i].dura);
    }
    for(int i = 0; i < n; i++) {
        scanf("%d",&si[i].tone);
    }
    cin>>T;
    sort(si,si+n);
//    for(int i = 0; i < n; i++) {
//        cout<<si[i].dura<<" "<<si[i].tone<<endl;
//    }
}
void dfs(int cur,int remain,int cnt,int last) {
    ans=max(cnt,ans);
    if(cur==n)return;
    int waste=(last!=-1?abs(si[last].tone-si[cur].tone):0)+si[cur].dura;
    if(remain>=waste)dfs(cur+1,remain-waste,cnt+1,cur);
    dfs(cur+1,remain,cnt,last);
}
void solve() {
    dfs(0,T,0,-1);
    printf("%d\n",ans);
}
int main() {
#ifdef local
    freopen("in", "r", stdin);
#endif // local
    while(cin>>n) {
        init();
        solve();
    }
}
View Code

 

scauoj 17233 歌唱比赛

原文:http://www.cnblogs.com/scau-zk/p/5856094.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!