快速求和(炒雞資料版)

2021-08-13 08:01:17 字數 2778 閱讀 6636

炒雞版本

時間限制: 10 sec 記憶體限制: 256 mb

給定乙個數字字串,用最少次數的加法讓字串等於乙個給定的目標數字。每次加法就是在字串的某個位置插入乙個加號。在需要的所有加號都插入後,就象做普通加法那樣來求值。 例如,考慮字串」12」,做0次加法,我們得到數字12。如果插入1個加號,我們得到3。因此,這個例子中,最少用1次加法就得到數字3。 再舉一例,考慮字串」303」和目標數字6,最佳方法不是」3+0+3」,而是」3+03」。能這樣做是因為1個數的前導0不會改變它的大小。 寫乙個程式來實現這個演算法。

第1行:1個字串s(1<=length(s)<=20)和1個整數n(n<=2^9-1)。s和n用空格分隔。

第1行:1個整數k,表示最少的加法次數讓s等於n。如果怎麼做都不能讓s等於n,則輸出-1。

2222 8
3
剛看這道題還以為多難,結果去看了看時間限制(10 sec),呵呵。

對於此題,我就啥也沒優化的去弄了個dfs。

就是搜尋加號的位置,再轉化為整型加上去。

#include

#include

#include

#include

using

namespace

std;

char c[25],h[25];int t,n,p,k[25],w;

void dfs(int x)

else

break;

e+=r;u++;

}r=0,p=0;

for(int i=w-1;i>=0;i--)

if(k[i])break;

else

e+=r;

if(e==n&&ureturn ;

}k[x]=1;

dfs(x+1);

k[x]=0;

dfs(x+1);

}int main()

但總覺得對不起這麼大的空間限制(256 mb)。

於是乎,我們就可以初始化乙個陣列,裝所有狀態下每幾個數間所有數的和。(也就是下列**的g陣列)

同時我們也可以對函式進行乙個優化。(多幾個變數,海闊天空)

而且我們找的也只是最少的加號數。

所以我們就可以進行剪枝,如果當前加號比目前答案大,就直接退出了。

同理,如果當前總和比n大,也就直接退了。

#include

#include

const int inf=100000000;

char s[25];

int n,len,g[25][25],ans=inf;

void read()

}void dfs(int

x,int

last,int p,int sum)

dfs(x+1,last,p,sum);

int t=g[last+1][x];

dfs(x+1,x,p+1,sum+t);

}int main()

時間限制: 1 sec 記憶體限制: 128 mb給定乙個數字字串,用最少次數的加法讓字串等於乙個給定的目標數字。每次加法就是在字串的某個位置插入乙個加號。在需要的所有加號都插入後,就象做普通加法那樣來求值。 例如,考慮字串」12」,做0次加法,我們得到數字12。如果插入1個加號,我們得到3。因此,這個例子中,最少用1次加法就得到數字3。 再舉一例,考慮字串」303」和目標數字6,最佳方法不是」3+0+3」,而是」3+03」。能這樣做是因為1個數的前導0不會改變它的大小。 寫乙個程式來實現這個演算法。

第1行:1個字串s(1<=length(s)<=40)和1個整數n(n<=10^5)。s和n用空格分隔。

第1行:1個整數k,表示最少的加法次數讓s等於n。如果怎麼做都不能讓s等於n,則輸出-1。

2222222222222222222222222222222222222222 80
39
(感覺整個人都不好了)

現在就肯定不能用普通的dfs了。

於是乎,記憶化dfs又來了。

這就像是在乙個範圍內查詢,再記憶化。

int n,len,memo[45][100005],g[45][45];/*memo[i][j]:前i個數組成j的最小加號個數

*/char c[45];

int dp(int i,int goal)

if(memo[i][goal]!=0)

return memo[i][goal];

int &ans=memo[i][goal];

for(int j=i;j<=len;j++)

void read()

int u=dp(1,n);

if(u==maxn)printf("-1\n");

else

printf("%d\n",u-1);

}int main()

最後再提一下,dp也可以做這道題,具體思路同上,這裡就不多說了。

乙個列中多行求和 多個區域 同類資料快速求和

1 給指定的區域快速求和,可以使用完整的sumif函式 sumif 條件區域,求和條件,求和區域 如 sumif a2 a10,d2,b2 b10 其中,a2 a10是條件區域,d2是求和條件,b2 b10是求和區域。條件區域 求和區域必須是單元格引用,而且行數與列數都相同。求和條件,可以是數字也可...

快速排序(非資料結構書版)

寫排序題目的時候偶然發現大佬的一片部落格的快排竟然和我們課本上學的快速排序的 寫法完全不同,及其精簡 好寫並容易理解 對學完快排後的 看完想了想還是因為自己沒有充分理解快排的思想所以沒寫出來如此精簡的 哭 如下 include using namespace std int n,a 1000001 ...

雲資料庫MySQL版快速上手教程

阿里雲大學免費課程 雲資料庫mysql版快速上手教程 課程介紹 mysql 是全球最受歡迎的開源資料庫,作為開源軟體組合 lamp linux apache mysql perl php python 中的重要一環,廣泛應用於各類應用場景。本課程主要介紹雲資料庫 mysql 版的使用 資料遷移 備份...