青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

算法學社
記錄難忘的征途
posts - 141,comments - 220,trackbacks - 0
這場只出了一道題,掉了很多分。D題和E題近期補上。

A

題目描述:
   有N(N<200)項工作。每項工作必須在一個模式下花費1個單位時間完成,工作之間的完成順序存在依賴關系,形成DAG圖。一共有三種模式(0,1,2)。模式之間的切換時間為
[0,1,2]
[2,0,1]
[1,2,0]
一開始你可以0花費選擇一種模式,問完成所有工作的最少時間。

算法分析:
   拓撲排序+貪心法。
   假設我目前在模式A,那么第一步一定要一口氣把A模式的任務全都完成。
   然后要選擇模式切換代價較小的模式。因為這樣的模式最多只有一種,所以就可以輕松解決了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int flag[3][3] = {
    {0,1,2},{2,0,1},{1,2,0}
};
const int N = 205;
int num[N] , G[N][N], Du[N], tmp[N],vis[N],n;
int work(int p){
//    cout<<"p: "<<p<<endl;
    int v = 0,f = 0;
    while(1){
        f = 0;
        for(int i=0;i<n;i++) if(!Du[i] && !vis[i] && num[i] == p){
//            cout<<i<<" ";
            vis[i] = 1;
            v++;
            for(int v=0;v<n;v++) if(!vis[v] && G[i][v]) 
                Du[v]--;
            f = 1;
        }
        if(!f) break;
    }
//    cout<<endl;
    for(int i=0;i<n;i++) if(!Du[i] && !vis[i] && flag[p][num[i]] == 1){
        v += 1 + work(num[i]);
        return v;
    }
    for(int i=0;i<n;i++) if(!Du[i] && !vis[i]) {
        v += 2 + work(num[i]);
        return v;
    }
    return v;
}
int main(){
    while( cin >> n){
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                G[i][j] = 0;
        for(int i=0;i<n;i++){
            scanf("%d",&num[i]);
            num[i]--;
        }
        int t;
        memset(tmp,0,sizeof(tmp));
        for(int i=0;i<n;i++){
            cin >> tmp[i];
            for(int oo=0;oo<tmp[i];oo++){
                int u;
                cin >> u;
                u --;
                G[u][i] = 1;
            }
        }
        int ans = ~0u>>2;
        for(int p=0;p<3;p++)
            for(int i=0;i<n;i++)
                if(!tmp[i] && p == num[i]){
                    memset(vis,0,sizeof(vis));
                    for(int i=0;i<n;i++) Du[i] = tmp[i];
                    int v =work(p);
//                    cout<<"ans: "<<p<<" "<<v<<endl;
                    if(v<ans) ans = v;
                    break;
                }
        cout<< ans << endl;
    }
}

B

給出一個序列a[10](a[i]<100),和N(N<100)。構造一個長度為N的數(shù)字,要求
   1.沒有前導0
   2.數(shù)字i不少于a[i]個
求構造方法數(shù)。

算法分析:
   典型的動態(tài)規(guī)劃求解。
   dp[i][j]表示前j個數(shù)字構成符合條件的長度為i的數(shù)字的方法數(shù)。
   顯然dp[i][j] = sum(dp[k][j-1] * C[i][k]) 其中k>0 && k<=i-a[j]
   組合數(shù)預處理出來即可,其中要考慮轉移0的問題,這個留給大家思考吧~~

#include<iostream>
#include<cstdio>
using namespace std;
const int mod = (int)1e9 + 7;
typedef long long ll;
const int N = 105;
ll C[N][N];
void OP(int msk){
    for(int i=0;i<10;i++, msk>>=1)
        cout<<(msk&1);cout<<" ";
}
int main(){
    for(int i=0;i<N;i++) {
        C[i][0] = 1;
        for(int j=1;j<=i;j++)
            C[i][j] = (C[i-1][j] + C[i-1][j-1]) % mod;
    }
    int n, a[11];
    static ll dp[N][1<<11];
    while(cin >> n){
        for(int i=0;i<10;i++){
            cin >> a[i];
        }
        dp[0][0] =1;
        for(int i = 0; i<=n; i++){
            for(int msk = 1; msk < (1<<10); msk++){
                ll &t = dp[i][msk] ;
                t = 0;
                for(int p = 0; p < 10; p++) if((1<<p) & msk){
                    ll s = 0;
                    for(int j=0;j<=i-a[p];j++){
                        if(p) s += C[i][i-j] * dp[j][msk^(1<<p)];
                        else s += i ?C[i-1][i-j]*dp[j][msk^(1<<p)] : 0;
                        s %= mod;
                        if(s){
//                            cout<<i<<" ";OP(msk);cout<<j<<" "<<p<<" "<<dp[j][msk^(1<<p)]<<endl;
//                            cout<<s<<endl;
                        }
                    }
                    t = (t+s) % mod;
                    break;
                }
            }
        }
        ll ans = 0;
        for(int i = 1; i<=n; i++)
            ans = (ans + dp[i][(1<<10)-1]) % mod;
        cout<< ans << endl;
    }
}

C

給一個N*N的矩陣(N<300),權值范圍是[-1000,1000]?,F(xiàn)在讓你從右上角走到左下角,只能向下或者向右走,走兩次,每個格子最多取一次權值,問最大能取到的值是多少。

算法分析:

因為格子上的權值可能是負數(shù),所以費用流ggg。
考慮動態(tài)規(guī)劃,想像兩次是兩個人a,b同時走的,在走了i步之后,a的x值是xa,b的x值是xb。
dp[i][xa][xb]記為此時可以獲取的最大權值。
轉移就很簡單了,呵呵~

#include<iostream>
#include<cstdio>
using namespace std;
const int N = 305;
int dp[2][N][N], num[N][N],n;
const int inf = ~0u>>2;
inline bool chk(int x,int y){
    return x >=0 && y >=0 && x <n && y <n;
}
inline void chkmax(int &a,const int b){if(a<b)a=b;}
int main(){
    while(cin >> n){
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                cin >> num[i][j] ;
        int ans = (dp[0][0][0] = num[0][0]);
        for(int i=1;i<2*n-1;i++) 
            for(int p = (i>=n)? i-n+1: 0; p < min(n,i+1); p++) {
                for(int q = p; q< min(n,i+1); q++) {
                    int v;
                    if(q == p) v = num[p][i-p];
                    else v = num[p][i-p] + num[q][i-q];
                    dp[i&1][p][q] = -inf;
                    for(int oo = 0; oo<2;oo++){
                        int nx1 = p - (oo==0);
                        int ny1 = i-p - (oo==1);
    //                    cout<<nx1<<" "<<ny1<<endl;
                        if(!chk(nx1,ny1)) continue;
                        for(int uu = 0; uu<2; uu++){
                            int nx2 = q - (uu==0);
                            int ny2 = i-q - (uu==1);
    //                        cout<<nx2<<" "<<ny2<<endl;
                            if(!chk(nx2,ny2)) continue;
                            int x1 = nx1,x2 =nx2;
                            if(x1>x2) swap(x1,x2);
    //                        if(p==q)    cout<<p<<" "<<i-p<<" "<<nx1<<" "<<nx2<<endl;
                            chkmax(dp[i&1][p][q], dp[i-1&1][x1][x2] + v);
                        }
                    }
                    ans = dp[i&1][p][q];
//                    if(p==q)    cout<<"i: "<<i<<" "<<p<<" "<<q<<" "<<ans<<endl;
                }
            }
        cout << ans << endl;
    }
    return 0;    
}




posted on 2012-08-03 15:36 西月弦 閱讀(291) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区四区国产| 久久久亚洲精品一区二区三区| 亚洲欧美激情视频| 亚洲美女淫视频| 亚洲精品国产品国语在线app| 精品av久久707| 在线看日韩欧美| 亚洲激情视频在线观看| 日韩亚洲欧美综合| 亚洲影音一区| 久久久精品国产免费观看同学| 亚洲国产精品一区制服丝袜| 国产精品99久久久久久久女警| 99日韩精品| 亚洲综合电影| 久久噜噜亚洲综合| 欧美日韩成人在线播放| 欧美午夜电影完整版| 国产精品视频一区二区三区| 国产亚洲一区二区三区在线播放| 一区二区在线观看视频在线观看| 亚洲国产精品一区二区久| 亚洲伦理在线免费看| 亚洲一区国产视频| 免费日韩精品中文字幕视频在线| 亚洲三级影院| 欧美一区二区三区在线观看 | 亚洲美女尤物影院| 亚洲在线一区二区三区| 欧美高清在线| 午夜一区二区三区不卡视频| 欧美大片网址| 国产在线精品一区二区中文 | 一本色道综合亚洲| 久久久夜精品| 亚洲一区www| 欧美成人日韩| 一区二区视频免费在线观看| 亚洲影院免费| 亚洲美女黄色| 欧美日韩成人综合| 欧美日韩一区二区三区| 国产精品人人做人人爽 | 欧美国产亚洲另类动漫| aa亚洲婷婷| 欧美va天堂在线| 国内精品久久久久久久果冻传媒| 亚洲午夜精品久久久久久浪潮| 免费毛片一区二区三区久久久| 午夜亚洲一区| 国产精品高潮在线| 在线性视频日韩欧美| 亚洲高清一区二| 久久国产精品免费一区| 国产精品免费小视频| aa成人免费视频| 亚洲精品国产拍免费91在线| 卡一卡二国产精品| 在线观看三级视频欧美| 久久精品久久综合| 香蕉亚洲视频| 国产精品v欧美精品v日韩| 夜夜夜久久久| 99成人免费视频| 欧美激情一区二区三区高清视频| 亚洲国产小视频| 亚洲黄网站黄| 欧美日韩精品久久| 亚洲午夜小视频| 亚洲专区一区二区三区| 国产精品毛片a∨一区二区三区| 在线一区二区视频| 亚洲在线播放| 一区二区在线观看视频| 亚洲国产成人一区| 欧美日韩国产成人在线| 亚洲欧美春色| 欧美在线视频免费播放| 韩日午夜在线资源一区二区| 免费成人性网站| 欧美成人一区二区三区| 国产亚洲女人久久久久毛片| 亚洲女与黑人做爰| 亚洲欧美在线一区二区| 国产精品久久久久aaaa| 午夜免费日韩视频| 欧美一区综合| 亚洲精品在线观看免费| 亚洲素人在线| 韩国av一区二区三区四区| 欧美成人资源网| 欧美精品在线极品| 欧美一级久久久久久久大片| 久久成人在线| 亚洲欧洲在线视频| 中国女人久久久| 今天的高清视频免费播放成人| 欧美激情一区二区三区四区| 午夜激情综合网| 亚洲私人影吧| 久久精品国产久精国产一老狼| 亚洲黄色在线视频| 午夜精品电影| 一区二区三区高清在线| 欧美一区二区三区视频免费播放 | 国产精品久久久久9999| 亚洲黄色成人网| 91久久综合| 国产一区二区三区四区三区四| 美女精品国产| 亚洲一区二区欧美| 国产中文一区二区三区| 欧美日韩亚洲一区二区三区在线| 国产精品久久久久久久久久久久久久| 亚洲伊人久久综合| 亚洲国产精彩中文乱码av在线播放| 国内精品福利| 亚洲日本一区二区| 国产一区二区三区四区hd| 亚洲人成毛片在线播放| 狠色狠色综合久久| 午夜亚洲激情| 亚洲无线一线二线三线区别av| 久久精品中文字幕一区| 亚洲在线播放电影| 久热re这里精品视频在线6| 欧美在线观看一区| 欧美久色视频| 亚洲黑丝在线| 精品69视频一区二区三区| 亚洲欧美日韩国产一区| 亚洲在线视频| 欧美视频日韩视频| 亚洲精品影视在线观看| 亚洲精品你懂的| 蜜臀av性久久久久蜜臀aⅴ| 久久综合九色99| 国内精品久久久久久久影视麻豆 | 日韩视频在线你懂得| 性做久久久久久免费观看欧美| 欧美激情在线免费观看| 国产精品免费一区二区三区观看| 亚洲激情啪啪| 久久久精品五月天| 好吊色欧美一区二区三区四区 | 国产日韩精品在线观看| 欧美日韩国产成人| 欧美涩涩视频| 狠久久av成人天堂| 日韩午夜三级在线| 老牛嫩草一区二区三区日本| 欧美国产精品一区| 亚洲欧美一区在线| 免费美女久久99| 激情综合网激情| 国产伦精品一区二区三| 亚洲一区在线观看视频| 亚洲一区二区三区激情| 黄色国产精品| 一本色道88久久加勒比精品| 欧美在线观看www| 亚洲免费高清| 欧美精品一区二区高清在线观看| 国产精品入口日韩视频大尺度| 欧美激情亚洲视频| 亚洲国产美女| 欧美日韩免费观看中文| 亚洲电影在线免费观看| 亚洲精品国产精品久久清纯直播| 久久精品国产亚洲精品| 国产精品视频网站| 久久久精品日韩欧美| 欧美国产亚洲视频| 亚洲午夜精品视频| 黄色资源网久久资源365| 免费亚洲电影在线| 一个色综合av| 久久亚洲免费| 亚洲作爱视频| 国产在线一区二区三区四区| 快射av在线播放一区| 一区二区三区欧美视频| 久久野战av| 国产精品99久久久久久久vr| 国产一区在线视频| 欧美日韩亚洲一区二区| 久久九九全国免费精品观看| 亚洲精品一区二区三区樱花 | 亚洲一区精品在线| 黑人一区二区三区四区五区| 欧美精品免费在线观看| 亚洲影音一区| 99av国产精品欲麻豆| 午夜精品99久久免费| 欧美成人日本| 性欧美精品高清| 一本久道久久综合狠狠爱| 激情综合网址| 国产欧美欧美| 国产精品国产三级国产|