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

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

uva 10564 Paths through the Hourglass

2019-11-10 18:58:27
字體:
來源:轉載
供稿:網友

原題: 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] (正放的三角形)

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


上一篇:Create Window

下一篇:進制轉換

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品国偷自产在线99热| 亚洲aⅴ日韩av电影在线观看| 亚洲成人av片在线观看| 91系列在线播放| 亚洲一级免费视频| 国产精品自产拍高潮在线观看| 亚洲最大成人在线| 欧美一级视频一区二区| 国产亚洲激情在线| 久久影院模特热| 最近2019中文字幕在线高清| 亚洲在线观看视频网站| 欧美午夜片在线免费观看| 欧美麻豆久久久久久中文| 北条麻妃在线一区二区| 一区二区成人av| 伊人久久久久久久久久久久久| 成人中心免费视频| 欧美国产日韩在线| 亚洲欧美一区二区激情| 久久国产精品亚洲| 久久不射电影网| 国产精品第二页| 欧美激情一区二区三级高清视频| 欧美噜噜久久久xxx| 亚洲午夜久久久影院| 亚洲国产私拍精品国模在线观看| 日韩av在线不卡| 91亚洲精品久久久久久久久久久久| 国产一区二区三区高清在线观看| 久久成人精品电影| 91av在线不卡| 成人444kkkk在线观看| 欧美激情精品久久久久| 久久久精品视频在线观看| 欧美日韩中文在线观看| 国内精品久久久久久久久| 亚洲激情电影中文字幕| 欧美另类精品xxxx孕妇| 疯狂蹂躏欧美一区二区精品| 国内精品久久久久影院优| 欧美激情亚洲综合一区| 亚洲国产成人精品女人久久久| 九九热r在线视频精品| 日韩欧美国产一区二区| 国产精品久久国产精品99gif| 国产精品444| 国产精品视频精品视频| 亚洲视频在线免费看| 亚洲三级黄色在线观看| 日韩在线播放视频| 国产日韩欧美电影在线观看| 一区二区欧美久久| 日韩成人中文字幕| 国产精品成熟老女人| 68精品国产免费久久久久久婷婷| 久久夜色精品国产亚洲aⅴ| 奇米一区二区三区四区久久| 中文字幕亚洲综合久久| 欧美激情成人在线视频| 欧美日韩一区二区免费在线观看| www.日本久久久久com.| 国产精品情侣自拍| 日韩福利视频在线观看| 91在线观看免费高清完整版在线观看| 日韩美女激情视频| 国产色综合天天综合网| 久久国产精品视频| 国产精品91久久久| 中文字幕精品www乱入免费视频| 国产欧美日韩亚洲精品| 欧美成人精品在线| 亚洲成人国产精品| 久久精品人人爽| 欧美激情亚洲一区| 国产成人综合精品| 成人黄色网免费| 欧美性xxxxxxxxx| 91精品久久久久久久久久另类| 亚洲精品国偷自产在线99热| 久久精品国产一区二区三区| 日韩中文字幕国产| 久久久999精品免费| 亚洲成人av中文字幕| 精品久久久久久久久久久| 精品夜色国产国偷在线| 欧美国产亚洲精品久久久8v| 最近2019年手机中文字幕| 久久久久久亚洲精品中文字幕| 91网站在线免费观看| 久久久久久网站| 亚洲视频在线免费看| 在线观看日韩专区| 欧美激情视频在线观看| 在线视频欧美日韩| 国产视频精品va久久久久久| 亚洲午夜精品久久久久久性色| 成人国产精品久久久| 日本中文字幕不卡免费| 国产精品一区二区3区| 91沈先生作品| 亚洲欧洲日本专区| 欧美日韩亚洲视频一区| 国产欧美日韩免费| 久久久久久999| 亚洲人成毛片在线播放| 国产精品成人免费电影| 丝袜美腿精品国产二区| 亚洲国产成人91精品| 国产一区玩具在线观看| 国产精品久久久久久久久久三级| 欧美日韩国产在线| 欧美电影在线观看| 2019国产精品自在线拍国产不卡| 久久久久久久网站| 91av在线免费观看| 成人av在线亚洲| 日韩免费黄色av| 在线播放国产一区二区三区| 久色乳综合思思在线视频| 欧美超级免费视 在线| 人人做人人澡人人爽欧美| 亚洲美女免费精品视频在线观看| 国产精品无av码在线观看| 日韩欧美亚洲综合| 国产精品视频网站| 国产精品xxx视频| 亚洲字幕一区二区| 日韩福利伦理影院免费| 日本道色综合久久影院| 91麻豆国产精品| 黑人精品xxx一区| 91在线无精精品一区二区| 成人黄色短视频在线观看| 亚洲午夜久久久久久久| 久久久久亚洲精品成人网小说| 91精品国产91久久| 成人免费视频在线观看超级碰| 欧美电影在线观看网站| 欧美贵妇videos办公室| 久久精品欧美视频| 揄拍成人国产精品视频| 亚洲理论在线a中文字幕| 国产成人精品久久久| 亚洲欧美国产日韩中文字幕| 国产日韩在线播放| 国产精品手机播放| 成人综合国产精品| 超碰日本道色综合久久综合| 亚洲人成网站777色婷婷| 久久精品99久久久香蕉| 中文字幕精品—区二区| 日韩大陆毛片av| 国产suv精品一区二区三区88区| 日韩欧美有码在线| 亚洲精品久久久久久久久久久久久| 国产精品久久久久久久久男| 亚洲视频欧美视频| 91在线视频一区| 色综合亚洲精品激情狠狠| 97av视频在线| 国产欧美中文字幕| 精品视频在线播放免| 亚洲国产精品视频在线观看|