国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

[poj]3187 Backward Digit Sums [dfs]

2019-11-06 05:26:49
字體:
來源:轉載
供稿:網友

FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N <= 10) in a certain order and then sum adjacent numbers to PRoduce a new list with one fewer number. They repeat this until only a single number is left. For example, one instance of the game (when N=4) might go like this:

3 1 2 4 4 3 6 7 9 16 Behind FJ’s back, the cows have started playing a more difficult game, in which they try to determine the starting sequence from only the final total and the number N. Unfortunately, the game is a bit above FJ’s mental arithmetic capabilities.

Write a program to help FJ play the game and keep up with the cows. Input Line 1: Two space-separated integers: N and the final sum. Output Line 1: An ordering of the integers 1..N that leads to the given sum. If there are multiple solutions, choose the one that is lexicographically least, i.e., that puts smaller numbers first. Sample Input 4 16 Sample Output 3 1 2 4 Hint Explanation of the sample:

There are other possible sequences, such as 3 2 1 4, but 3 1 2 4 is the lexicographically smallest.

link

題解

分析一下4個數的情況

times
1 A B C D
2 A+B B+C C+D
3 A+2B+C B+2C+D
4 A+3(B+C)+D

那么n=5呢,歸納得:A+3(B+C)+D+B+3(C+D)+E=A+4B+6C+4D+E 具體什么規律,不好言說,但是我們可以預處理得到n時的系數

dp[1][1]=1; for(int i=2;i<=10;i++){ for(int j=1;j<=i;j++) dp[i][j]=dp[i-1][j-1]+dp[i-1][j]; }

然后dfs即可,復雜度 o(n!)

#include<stdio.h>#include<stack>using namespace std;int dp[11][11];int n,sum;void init(){ dp[1][1]=1; for(int i=2;i<=10;i++){ for(int j=1;j<=i;j++) dp[i][j]=dp[i-1][j-1]+dp[i-1][j]; }}stack<int> sta;int vis[11];bool dfs(int cnt,int now){ if(cnt==n&&now==sum) return true; if(now>=sum) return false; for(int i=1;i<=n;i++){ if(!vis[i]){ vis[i]=true; if(dfs(cnt+1,now+i*dp[n][cnt+1])){ sta.push(i); return true; } vis[i]=false; } } return false;}int main(){ init(); scanf("%d%d",&n,&sum); dfs(0,0); while(!sta.empty()){ printf("%d",sta.top()); sta.pop(); if(!sta.empty()) putchar(' '); } putchar('/n'); return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贺州市| 沧州市| 龙游县| 金塔县| 象山县| 合阳县| 庆阳市| 蓬安县| 从江县| 上犹县| 布尔津县| 宜君县| 泽州县| 金寨县| 荆州市| 阿拉善右旗| 温宿县| 麻江县| 辽源市| 渭南市| 靖边县| 织金县| 宝山区| 渭南市| 涿州市| 湘潭市| 嘉义市| 黄骅市| 平乡县| 盘锦市| 巴彦淖尔市| 南和县| 灵台县| 宜兰市| 理塘县| 荆门市| 宜良县| 山东| 庆云县| 宁夏| 桃园市|