王道机试指南7贪心策略
例题7.1鸡兔同笼(北京大学上机)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int a;
while(scanf("%d", &a) != EOF){
if(a % 2 != 0 || a < 2){
printf("0 0");
}else{
printf("%d %d\n", a/4 + (a%4)/2, a/2);
}
}
return 0;
}
例题7.2代理服务器(清华上机)
#include<iostream>
#include<string>
using namespace std;
int n, m;
string angency[1005], server[5005];
int ans;
//int now;
int find(int num){
int max = -1;
for(int i = 0; i < n; i++){
// if(i == now) continue;
for(int j = num;; j++){
if(j == m) return -1;
if(angency[i] == server[j]){
if(j > max){
max = j;
// now = i;
}
break;
}
}
}
ans++;
return max;
}
int main(){
while(cin >> n){
// now = -1;
ans = 0;
for(int i = 0; i < n; i++) cin >> angency[i];
cin >> m;
for(int i = 0; i < m; i++) cin >> server[i];
int flag = find(0);
if(n == 1 && flag != -1){
cout << -1 << endl;
continue;
}
while(true){
flag = find(flag);
if(flag == -1) break;
}
cout << ans << endl;
}
return 0;
}