亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

uva 10564 Paths through the Hourglass

2019-11-10 16:52:09
字體:
來源:轉載
供稿:網友

原題: In the hourglass to the right a path is marked. A path always starts at the first row and ends at the last row. Each cell in the path (except the first) should be directly below to the left or right of the cell in the path in the PRevious row. The value of a path is the sum of the values in each cell in the path. A path is described with an integer representing the starting point in the first row (the leftmost cell being 0) followed by a direction string containing the letters ‘L’ and ‘R’, telling whether to go to the left or right. For instance, the path to the picture is described as ‘2 RRRLLRRRLR’. 這里寫圖片描述 Given the values of each cell in an hourglass as well as an integer S, calculate the number of distinct paths with value S. If at least one path exist, you should also print the path with the lowest starting point. If several such paths exist, select the one which has the lexicographically smallest direction string. Input The input contains several cases. Each case starts with a line containing two integers N and S (2 ≤ N ≤ 20, 0 ≤ S < 500), the number of cells in the first row of the hourglass and the desired sum. Next follows 2N ? 1 lines describing each row in the hourglass. Each line contains a space separated list of integers between 0 and 9 inclusive. The first of these lines will contain N integers, then N ? 1, …, 2, 1, 2, …, N ? 1, N. The input will terminate with N = S = 0. This case should not be processed. There will be less than 30 cases in the input. Output For each case, first output the number of distinct paths. If at least one path exist, output on the next line the description of the path mentioned above. If no path exist, output a blank line instead. Sample Input 6 41 6 7 2 3 6 8 1 8 0 7 1 2 6 5 7 3 1 0 7 6 8 8 8 6 5 3 9 5 9 5 6 4 4 1 3 2 6 9 4 3 8 2 7 3 1 2 3 5 5 26 2 8 7 2 5 3 6 0 2 1 3 4 2 5 3 7 2 2 9 3 1 0 4 4 4 8 7 2 3 0 0 Sample Output 1 2 RRRLLRRRLR 0

5 2 RLLRRRLR

中文: 來自(lucky 貓) 在左邊像沙漏的圖中有一條路徑被標示出來。在沙漏中的路徑總是從最上方開始到最下方結束。當由某列中的某個格子往下列走時只能往左或往右一格。而路徑的值就是經過格子的值的總和。

一條路徑以一個數字以及一連串的動作組成。數字代表此路徑從最上方一列的哪一個格子開始走起(最左方的格子編號為 0)。動作為 R 或 L 其中之一,代表該往右下或左下方走。以左圖中的路徑為例:該路徑為 2 RRRLLRRRLR

給你沙漏中每個格子的值,以及一個數 S,請你算出有多少條路徑的值為S。如果不只一條這樣的路徑存在,輸出最上方列起始位置最小的那條。如果還是不只一條存在,則輸出字典順序最小的那條。

Input

每組測試資料的第一列有2個整數N,S(2 <=N <= 20, 0 <= S < 500)。N代表沙漏中最上方列格子的數目,S代表要求路徑的值。接下來的 2N-1 列描述此沙漏中每一列的情形。每一列中的數字均介於 0 到 9 之間,且以一空白字元相隔。沙漏中各列的格子數分別為N, N-1, …, 2, 1, 2, …, N-1, N.

當N=S=0時代表輸入結束,測試資料的數目不會超過30。請參考Sample Input。

Output

對每組測試資料請輸出2列。 第一列為路徑的數目,第二列為所要求路徑的表示法。如果所要求路徑不存在,第二列請輸出空白列。請參考Sample Output。

#include <bits/stdc++.h>using namespace std;int n,s;long long dp[501][41][41];int hg[41][41];int main(){ ios::sync_with_stdio(false); while(cin>>n>>s,n+s) { for(int i=1;i<=n;i++) for(int j=1;j<=n-i+1;j++) cin>>hg[i][j]; for(int i=n+1;i<2*n;i++) for(int j=1;j<=i-n+1;j++) cin>>hg[i][j]; memset(dp,0,sizeof(dp)); memset(mark,0,sizeof(mark)); for(int i=1;i<=n;i++) dp[hg[2*n-1][i]][2*n-1][i]=1; for(int i=2*n-2;i>=n;i--) { for(int j=1;j<=i-n+1;j++) { for(int k=hg[i][j];k<=s;k++) { dp[k][i][j]+=dp[k-hg[i][j]][i+1][j]; dp[k][i][j]+=dp[k-hg[i][j]][i+1][j+1]; } } } for(int i=n-1;i>=1;i--) { for(int j=1;j<=n-i+1;j++) { for(int k=hg[i][j];k<=s;k++) { dp[k][i][j]+=dp[k-hg[i][j]][i+1][j-1]; dp[k][i][j]+=dp[k-hg[i][j]][i+1][j]; } } } long long ans=0; int start=0; for(int i=1;i<=n;i++) { if(start==0&&dp[s][1][i]!=0) start=i; ans+=dp[s][1][i]; } cout<<ans<<endl; if(0==ans) { cout<<endl; continue; } else { cout<<start-1<<" "; for(int i=1;i<n;i++) { s-=hg[i][start]; if(dp[s][i+1][start-1]) { cout<<'L'; start--; } else cout<<'R'; } for(int i=n;i<2*n-1;i++) { s-=hg[i][start]; if(dp[s][i+1][start]) cout<<'L'; else { cout<<'R'; start++; } } cout<<endl; } } return 0;}

從上往下算(沒算路徑)

#include <bits/stdc++.h>using namespace std;int n,s;long long dp[501][41][41];int hg[41][41];int main(){ ios::sync_with_stdio(false); while(cin>>n>>s,n+s) { for(int i=1;i<=n;i++) for(int j=1;j<=n-i+1;j++) cin>>hg[i][j]; for(int i=n+1;i<2*n;i++) for(int j=1;j<=i-n+1;j++) cin>>hg[i][j]; memset(dp,0,sizeof(dp)); memset(mark,0,sizeof(mark)); for(int i=1;i<=n;i++) dp[hg[1][i]][1][i]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=n-i+1;j++) { for(int k=hg[i][j];k<=s;k++) { dp[k][i][j]+=dp[k-hg[i][j]][i-1][j]; dp[k][i][j]+=dp[k-hg[i][j]][i-1][j+1]; } } } for(int i=n+1;i<2*n;i++) { for(int j=1;j<=i-n+1;j++) { for(int k=hg[i][j];k<=s;k++) { dp[k][i][j]+=dp[k-hg[i][j]][i-1][j]; dp[k][i][j]+=dp[k-hg[i][j]][i-1][j-1]; } } } long long ans=0; for(int i=1;i<=n;i++) { ans+=dp[s][2*n-1][i]; } cout<<ans<<endl; } return 0;}

思路:

類似數塔問題,由于要求路徑數,需要考慮每個數取得以后是否能夠滿足和為固定的s,所以需要記錄s的值,又類似背包的問題。以倒三角威力,對于一個格,可以由左上的格子轉移,也可以又右上的格子轉移,所以狀態轉移方程為(從上往下算hg[i][j]為格子中的數)

dp[s][i][j]+=dp[s-hg[i][j]][i-1][j]+dp[s-hg[i][j]][i-1][j+1] (倒放的三角形) dp[s][i][j]+=dp[s-hg[i][j]][i-1][j]+dp[s-hg[i][j]][i-1][j-1] (正放的三角形)

但是此題不能從上往下算,因為打印路徑的緣故,所以需要從底部往頂部推導。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合大片69999| 国产欧美一区二区| 日本欧美精品在线| 性欧美xxxx| 日韩精品中文字幕视频在线| 国产中文字幕91| 日韩综合中文字幕| 国模极品一区二区三区| 亚洲精品国产精品自产a区红杏吧| 精品国产一区二区三区久久久| 在线播放日韩专区| 国外成人免费在线播放| 亚洲综合在线播放| 国产亚洲精品久久久优势| 国产精品黄色影片导航在线观看| 国产日韩在线亚洲字幕中文| 欧美中文在线免费| 91国产在线精品| 日韩视频免费大全中文字幕| 欧美一区二区影院| 九九热99久久久国产盗摄| 日韩电视剧在线观看免费网站| 91黑丝在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 青草热久免费精品视频| 在线成人中文字幕| 亚洲人成电影在线播放| 日韩美女视频中文字幕| 国语自产精品视频在线看抢先版图片| 久久成年人免费电影| 国产精品亚洲аv天堂网| 久久久国产成人精品| 成人黄色av播放免费| 国内外成人免费激情在线视频| 日韩av片永久免费网站| 国产精品久久久久999| 亚洲欧美第一页| 亚洲综合视频1区| 欧美激情一区二区三区高清视频| 欧美俄罗斯性视频| 色爱av美腿丝袜综合粉嫩av| 亚洲美女av电影| 热久久美女精品天天吊色| 亚洲一区二区三区777| 精品国产一区二区三区久久久狼| 久久不射电影网| 日韩视频在线免费观看| 日韩国产在线看| 亚洲第一天堂无码专区| 国产精品一区二区久久久久| 日韩人体视频一二区| 国产欧美精品一区二区| 91成人免费观看网站| 岛国视频午夜一区免费在线观看| 国产精品久久久久久久av电影| 亚洲欧美中文日韩v在线观看| 久久精品色欧美aⅴ一区二区| 青青草精品毛片| 日韩欧美主播在线| 国产成人精品在线观看| 亚洲国产私拍精品国模在线观看| 成人在线视频网站| 亚洲va码欧洲m码| 欧美亚洲国产成人精品| 久久精品免费电影| 国产精品丝袜白浆摸在线| 中文字幕国内精品| 国产精品久久久久久中文字| 亚洲xxxx妇黄裸体| 日韩电影中文 亚洲精品乱码| 日韩欧美第一页| 久久精品国产一区二区三区| 亚洲国产一区二区三区在线观看| 欧美富婆性猛交| 国产97在线亚洲| 国产精品人人做人人爽| 欧美性xxxx极品hd欧美风情| 欧美日韩国产麻豆| 欧美性黄网官网| 久热国产精品视频| 亚洲日本欧美日韩高观看| 91中文精品字幕在线视频| 亚洲免费av网址| 91久久夜色精品国产网站| 欧美激情免费观看| 日韩在线观看精品| 久国内精品在线| 亚洲直播在线一区| 岛国精品视频在线播放| 日韩精品福利在线| 清纯唯美日韩制服另类| 97国产在线观看| 日韩中文有码在线视频| 日韩综合中文字幕| 国产精品成人av性教育| 亚洲精品国产精品自产a区红杏吧| 欧美黄色小视频| 欧美理论片在线观看| 丁香五六月婷婷久久激情| 亚洲精品丝袜日韩| 国产欧美日韩高清| 91免费欧美精品| 亚洲电影av在线| 国产中文欧美精品| 国产精品2018| 欧美午夜电影在线| 疯狂做受xxxx欧美肥白少妇| 国产精品第100页| 18久久久久久| 亚洲最大成人网色| 国产一区二区三区毛片| 欧美一级大片在线免费观看| 久久成年人视频| 国产精品一久久香蕉国产线看观看| 国产日韩av高清| 亚洲第一区在线观看| 欧美成人免费在线观看| 成人两性免费视频| 一级做a爰片久久毛片美女图片| 91香蕉国产在线观看| 国产成人91久久精品| 懂色av一区二区三区| 91精品久久久久久久久久久久久久| 日韩精品在线观看网站| 亚洲大胆美女视频| 精品国产老师黑色丝袜高跟鞋| 日韩在线观看成人| 久久成人精品视频| 欧美日韩国产一区二区| 亚洲欧洲午夜一线一品| 久久久久久免费精品| 精品久久久久久中文字幕一区奶水| 国产精品福利在线观看网址| 成人网址在线观看| 亚洲欧美www| 日韩欧美在线视频免费观看| 国产精品高清网站| 性色av一区二区三区免费| 久久久久www| 日韩av色综合| 久久精品99久久久久久久久| 91精品国产自产91精品| 尤物yw午夜国产精品视频明星| 久久久久久成人| 日韩欧美在线视频| 国产精品久久久久福利| 亚洲国产日韩精品在线| 久久精品国产2020观看福利| 日本久久久久久久久久久| 日韩精品有码在线观看| 国产视频久久久久久久| 国产亚洲欧美日韩精品| 久久久久久久久久久91| 国产精品美乳在线观看| 97在线视频国产| 欧美日韩国产色| 日韩一区二区精品视频| 欧美特级www| 在线精品国产欧美| 97在线观看视频| 日韩在线观看免费全| 日韩电影在线观看中文字幕| 日本欧美国产在线| 欧美一二三视频|