windows 10 wifi不調
windows 10に変えて10日ほど経ちますが,すっきりとした見栄えでとても満足しています.
ところが,新しいアップデートで突然wifiが使えなくなってしまいました.(surface pro)
ということで,私がとった修復策を書きます.
- デバイスマネージャを開く
- ネットワークアダプタタブ
- "Marvell AVASTAR ・・・"に異常が...
停止してしまっていたので,再開したのですが,やっぱり駄目.
- 右クリック,削除
- 再起動
再起動をすると,自動的にデバイスが検出されて再インストールされるようです.
POJ 3046 Ant Counting
問題(http://poj.org/problem?id=3046)
ラベル1〜T(11000)をつけたアリがA匹います。 各々のラベルをつけたアリは、匹()です。 サイズがS〜Bの異なる集合は何種類あるでしょうか。
異なる集合を数え上げたいので、各々の集合は昇順に並べられているとします。
すると、最終要素の個数によって、サイズを一つ上げた時にすべき挙動が変わることになります。
具体的には、を「最終要素がラベルiで、j個含まれている集合の個数」とすると、
の時には、
となります。
また、k>iなるkを最終要素に加えることで、新たな集合を作ることもできるので、コードは以下のようになりました。
#include <cstdio> #include <iostream> #include <vector> #include <map> using namespace std; #define MAX_T 1000 #define MAX_N 100 #define MAX_A 100000 #define BASE 1000000 int T, A, B, S; int N[MAX_T]; int dp[2][MAX_T][MAX_N]; void solve(){ int cnt = 0; for(int i=0; i<T; i++){ dp[1][i][0] = 1; dp[0][i][0] = 0; for(int j=1; j<N[i]; j++){ dp[0][i][j] = 0; dp[1][i][j] = 0; } } int size = 2; while(size <= B+1){ int sum = 0; for(int i=0; i<T; i++){ for(int j=0; j<N[i]; j++){ if(dp[(size+1)%2][i][j] > 0){ if(j < N[i]){ dp[size%2][i][j+1] += dp[(size+1)%2][i][j]; dp[size%2][i][j+1] %= BASE; } sum += dp[(size+1)%2][i][j]; sum %= BASE; if(size>S){ cnt += dp[(size+1)%2][i][j]; cnt %= BASE; } dp[(size+1)%2][i][j] = 0; } } if(i+1<T){ dp[size%2][i+1][0]+=sum; dp[size%2][i+1][0] %= BASE; } } size++; } cout << cnt << endl; } int main(){ fill(N, N+MAX_T, 0); scanf("%d %d %d %d", &T, &A, &S, &B); int tmp; for(int i=0; i<A; i++){ scanf("%d", &tmp); N[tmp-1]++; } solve(); return 0; }
まだまだ遅いので、もっと効率のやり方があるのだろうなと思います。
POJ1742 Coins
問題 (http://poj.org/problem?id=1742)
n種類のコイン ,,・・・が、それぞれ, , ・・・枚ある。 m円以下の価格を、何種類お釣りなしに支払うことができるか。
最初は、動的計画法を用いず、setで一意性を担保し全てを足していったが案の定TLE。
個数制限付き部分和を用いたところ、通った。
#include <cstdio> #include <iostream> #include <vector> #include <map> #include <set> using namespace std; #define MAX_N 100 #define MAX_M 100000 int N, M; int coin[2][MAX_N]; int dp[MAX_M+1]; void solve(){ int cnt = 0; fill(dp, dp+MAX_M+1, -1); for(int i=0; i<N; i++){ dp[0] = true; for(int j=0; j<=M; j++){ if(dp[j] >= 0)dp[j] = coin[1][i]; else if((j<coin[0][i]) || dp[j-coin[0][i]]<=0) dp[j] = -1; else dp[j] = dp[j-coin[0][i]]-1; if(i==N-1 && dp[j]>=0)cnt++; } } cout << cnt-1 << endl; } int main(){ scanf("%d %d", &N, &M); while((N!=0) || (M!=0)){ for(int i=0; i<N; i++){ scanf("%d", &coin[0][i]); } for(int i=0; i<N; i++){ scanf("%d", &coin[1][i]); } solve(); scanf("%d %d", &N, &M); } return 0; }