題目鏈結
題目大意:有n個人,這些人分成兩部分:1.誠實的,他說的話全是真實的。2.不友善的,他說的話可能是真也可能是假。
每個人說了ai句話:第i個人的第j句話是:x是y的,其中x表示乙個人的編號,y是1或者0,表示誠實和不友善。現在問最多可能有多少人是誠實的。
解題思路:
看到了n的範圍小於15,考慮二進位制列舉出所有情況,然後分別加以判斷。
例如有五個人,其中一種二進位制列舉出的情況是00110,那麼我們只需要判斷第三和第四個人說的話是否矛盾即可,其餘的人可以直接跳過。
判斷思路:
如果a說x是誠實的,但是b說x是不友善的,那麼當前列舉的情況不成立
如果a說x是誠實的,但是x在當前列舉的情況中是不友善的,那麼當前列舉的情況不成立
如果a說x是不友善的,但是x在當前列舉的情況中是誠實的,那麼當前列舉的情況不成立
ac**:
struct node
;vector vec[20]
;//vec[i][j].p表示i的第j句話針對的是p,vec[i][j].y表示i的第j句話說p是y(y=1、0)
int a[20]
;int all[
35000][
20];//2的15次方<35000
int vis[20]
;int
main()
}for
(int i =
1; i <= n; i++))
;}}int ans =0;
for(
int i =
0; i <(1
<< n)
; i++)if
(vec[j]
[k].y &&
!all[i]
[vec[j]
[k].p])if
(!vec[j]
[k].y && all[i]
[vec[j]
[k].p])if
(vec[j]
[k].y)
vis[vec[j]
[k].p]=1
;else
vis[vec[j]
[k].p]=0
;}}if
(!flag)
break;}
if(flag)
}printf
("%d\n"
, ans)
;return0;
}
從尾到頭列印列表
輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。思路一 class solution 返回從尾部到頭部的列表值序列,例如 1,2,3 def printlistfromtailtohead self,listnode write code here arrlist while lis...
從尾到頭輸出節點
題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個節點的值。解題思路 反向輸出,即先進後出,於是可以用棧的特性來實現反向輸出 1.建立乙個節點類listnode 包含節點序號serialnum,和後繼節點next 2.建立節點類listnode的例項讓第二個節點成為第乙個節點的後繼節點,第三個節點...
從尾到頭列印列表
輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist 這個題相對簡單,可以用遞迴的方法來做,以下列鍊錶為例,通過遞迴到鍊錶的尾巴 1的下乙個為null 開始返回,即到1時開始向arraylist中新增值,實現時只需將新增值的 放在遞迴語句之後即可。也可以先將鍊錶反轉然後再賦值給arrayli...