Uva-111-History Grading
1370 ワード
事件の発生年はそれぞれ違っています.nつの事件が発生した年を入力して、学生の答えを入力する時、このnつの事件の年の一番長い学生にいくつか並んでいます.連続しないでください.
テーマリンク:http://uva.onlinejudge.org/index.php?option=com_オンラインjudge&Itemid=8&page=show_problem&category=114&problem=47
——>>問題の意味を理解することが重要で、入力したのは年であって、事件ではない.i番目の位置はaで、i番目の事件のa年目の発生を表す.
状態移行方程式:d[i]=max(d[i],d[j]+1)d[i]第iのイベントを終点とする最長の道を示す.
もう一つは入力方式で、初めてwhile(1){}を使って学生の答えを入力した結果、TLEになりました.第二回は学生の答えを入力した時の最初の年に変えました.残りのn-1年を入力して、AC!
テーマリンク:http://uva.onlinejudge.org/index.php?option=com_オンラインjudge&Itemid=8&page=show_problem&category=114&problem=47
——>>問題の意味を理解することが重要で、入力したのは年であって、事件ではない.i番目の位置はaで、i番目の事件のa年目の発生を表す.
状態移行方程式:d[i]=max(d[i],d[j]+1)d[i]第iのイベントを終点とする最長の道を示す.
もう一つは入力方式で、初めてwhile(1){}を使って学生の答えを入力した結果、TLEになりました.第二回は学生の答えを入力した時の最初の年に変えました.残りのn-1年を入力して、AC!
#include
#include
using namespace std;
const int maxn = 20 + 10;
int main()
{
int n, cmp[maxn], a[maxn], d[maxn], i, j, temp;
scanf("%d", &n);
for(i = 1; i <= n; i++) scanf("%d", &cmp[i]); // i cmp[i]
while(~scanf("%d", &temp))
{
a[temp] = 1;
for(i = 2; i <= n; i++)
{
scanf("%d", &temp);
a[temp] = i; // : temp i
}
for(i = 1; i <= n; i++) d[i] = 1;
int ret = 1;
for(i = 1; i <= n; i++)
for(j = 1; j < i; j++)
if(cmp[a[j]] < cmp[a[i]])
{
d[i] = max(d[i], d[j]+1);
ret = max(ret, d[i]);
}
printf("%d
", ret);
}
return 0;
}