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

算法學社
記錄難忘的征途
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>
            亚洲免费在线观看视频| 欧美一站二站| 欧美亚洲三区| 亚洲一区在线免费| 99精品国产一区二区青青牛奶 | 久久综合伊人77777麻豆| 久久精品国产亚洲aⅴ| 久久久综合激的五月天| 免费试看一区| 亚洲黄色av一区| 亚洲精选在线| 亚洲欧美日韩国产综合| 另类图片综合电影| 欧美a级片一区| 国产精品国产三级国产普通话99| 国产精品自拍网站| 亚洲国产导航| 久久爱www| 亚洲国产成人久久综合| 亚洲欧美精品suv| 免费成人在线视频网站| 国产精品青草久久| 亚洲欧洲一区二区在线观看 | 你懂的视频一区二区| 91久久中文| 午夜亚洲性色视频| 欧美日韩直播| 雨宫琴音一区二区在线| 香蕉尹人综合在线观看| 亚洲第一偷拍| 欧美一区视频| 国产精品九九久久久久久久| 亚洲盗摄视频| 久久深夜福利| 亚洲综合色丁香婷婷六月图片| 免费黄网站欧美| 国产在线乱码一区二区三区| 亚洲欧美视频一区二区三区| 亚洲国产精品成人精品| 久久久久久久网站| 国产一区二区三区精品久久久 | 欧美亚洲视频在线观看| 亚洲国产人成综合网站| 久久久久久九九九九| 国产精品一区毛片| 亚洲综合久久久久| 一本色道久久综合狠狠躁篇怎么玩| 国产精品国产三级欧美二区| 欧美精品综合| 国内精品久久久久久| 篠田优中文在线播放第一区| 一本久道久久综合中文字幕| 欧美精品91| 亚洲国产精品123| 久久综合国产精品| 欧美在线free| 红杏aⅴ成人免费视频| 久久国产成人| 欧美亚洲综合在线| 国产一区二区三区久久悠悠色av| 午夜欧美不卡精品aaaaa| 亚洲精品在线免费观看视频| 欧美日韩ab片| 亚洲在线播放电影| 一本到高清视频免费精品| 欧美视频日韩视频| 亚洲一区二区三区午夜| 亚洲免费观看高清完整版在线观看| 欧美激情在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品盗摄一区二区三区| 亚洲精品在线视频观看| 欧美大片在线看免费观看| 久久精品国产清高在天天线| 国产在线精品自拍| 欧美成人精品不卡视频在线观看 | 国产欧美日本一区视频| 久久成人精品视频| 久久gogo国模裸体人体| 亚洲国产精品激情在线观看| 男女精品视频| 中文网丁香综合网| 亚洲高清一区二| 久久亚洲精品一区二区| 亚洲电影免费| 91久久黄色| 欧美人与性动交α欧美精品济南到| 亚洲二区精品| 亚洲精品网址在线观看| 国产精品ⅴa在线观看h| 狠狠综合久久av一区二区小说| 国产一区二区三区在线观看免费| 久久精品最新地址| 久久av一区二区| 中文精品一区二区三区| 国产精品久久久免费| 999亚洲国产精| 正在播放亚洲一区| 欧美性片在线观看| 欧美成人高清| 欧美日韩91| 性亚洲最疯狂xxxx高清| 蜜桃伊人久久| 亚洲一区二区成人在线观看| 久久成人亚洲| 亚洲在线视频观看| 欧美黄色免费网站| 久久久久久欧美| 欧美亚洲成人免费| 欧美激情网友自拍| 国产亚洲美州欧州综合国| 一区精品在线| 亚洲乱亚洲高清| 国产精品人人爽人人做我的可爱 | 亚洲人在线视频| 在线一区二区三区四区| 国内精品免费在线观看| 一本久久a久久免费精品不卡| 狠狠色综合一区二区| 亚洲尤物精选| 制服丝袜激情欧洲亚洲| 久久午夜国产精品| 亚洲一二三区精品| 欧美韩日一区| 牛夜精品久久久久久久99黑人| 国产精品视频九色porn| 亚洲视屏一区| 亚洲欧美日韩精品久久久久| 欧美日本一区二区高清播放视频| 午夜精品视频在线观看一区二区| 欧美大片第1页| 免费高清在线视频一区·| 国产精品入口福利| 亚洲最新色图| 亚洲一级影院| 国产精品扒开腿做爽爽爽视频| 亚洲国产一区视频| 91久久一区二区| 免费成人av| 亚洲福利精品| 亚洲精品四区| 欧美日韩国产美| 亚洲毛片一区| 亚洲视频 欧洲视频| 国产精品久久久久婷婷| 99re视频这里只有精品| 欧美一区二区三区的| 欧美三级在线视频| 亚洲激情在线观看视频免费| 在线日韩中文| 欧美激情在线狂野欧美精品| 亚洲精品久久久久久久久久久久久| 亚洲伦伦在线| 欧美性色综合| 欧美一级黄色录像| 久热精品在线| 亚洲国产精品第一区二区三区| 欧美大片一区二区三区| 亚洲黄色有码视频| 亚洲图片你懂的| 国产欧美日韩激情| 久久精品二区| 亚洲人被黑人高潮完整版| 亚洲欧美日韩直播| 亚洲二区视频| 国产精品久久久久毛片软件| 久久av最新网址| 日韩午夜免费视频| 久久精品国产视频| 亚洲日本中文| 国产嫩草影院久久久久| 老司机凹凸av亚洲导航| 欧美激情亚洲激情| 亚洲欧美日韩第一区| 亚洲激情黄色| 国产日韩av一区二区| 欧美电影免费观看高清完整版| 中文在线资源观看网站视频免费不卡| 久久99在线观看| 一区二区毛片| 国产一区深夜福利| 国产精品白丝jk黑袜喷水| 午夜宅男久久久| 亚洲日本va在线观看| 欧美在线一级va免费观看| 亚洲人成亚洲人成在线观看| 欧美偷拍一区二区| 久久影音先锋| 香蕉亚洲视频| 日韩一区二区精品在线观看| 欧美大尺度在线| 久久精品1区| 亚洲男人av电影| 亚洲伦理一区| 激情成人亚洲| 国产一区日韩一区| 国产精品久久久久久久久久久久久| 欧美在线视频一区二区| 亚洲线精品一区二区三区八戒| 国外成人在线视频网站|