HDU 母函式簡單題 - 找單詞/Ignatius and the Princess III/Square Coins/Holding Bin-Laden Captive!
簡單的四道母函式題。都做了2遍,一次母函式,一次計數DP(或叫揹包)。
但是這幾題揹包的效率比母函式高,而且程式碼也短多了。。。
HDU 1028 Ignatius and the Princess III
程式碼:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <map>
using namespace std;
#define LL long long
int c1[130];
int c2[120];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<=n;i++)
{
c1[i]=1;
c2[i]=0;
}
for(int i=2;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=0;k+j<=n;k+=i)
{
c2[k+j]+=c1[j];
}
}
for(int i=0;i<=n;i++)
{
c1[i]=c2[i];
c2[i]=0;
}
}
printf("%d\n",c1[n]);
}
return 0;
}
HDU 2082 找單詞
程式碼:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <map>
using namespace std;
#define LL long long
int c1[55];
int c2[55];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(c1,0,sizeof c1);
memset(c2,0,sizeof c2);
c1[0]=1;
for(int i=1;i<=26;i++)
{
int a;scanf("%d",&a);
for(int j=0;j<=50;j++)
{
for(int k=0,num=0;j+k<=50&&num<=a;k+=i,num++)
{
c2[k+j]+=c1[j];
}
}
for(int j=0;j<=50;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
int ans=0;
for(int i=1;i<=50;i++)
{
ans+=c1[i];
}
printf("%d\n",ans);
}
return 0;
}
HDU 1398 Square Coins
程式碼:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <map>
using namespace std;
#define LL long long
const int N = 300+6;
int c1[N];
int c2[N];
int coin[20];
void init()
{
for(int i=1;i<=17;i++)
{
coin[i]=i*i;
}
}
int main()
{
int n;
init();
while(~scanf("%d",&n)&&n)
{
for(int i=0;i<=n;i++)
{
c1[i]=1,c2[i]=0;
}
for(int i=2;i<=17&&coin[i]<=n;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=0;k+j<=n;k+=coin[i])
{
c2[k+j]+=c1[j];
}
}
for(int j=0;j<=n;j++)
c1[j]=c2[j],c2[j]=0;
}
printf("%d\n",c1[n]);
}
return 0;
}
HDU 1085 Holding Bin-Laden Captive!
程式碼:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <map>
using namespace std;
#define LL long long
const int N = 300+6;
int vis[9000];
int main()
{
int b[3]={1,2,5};
int a[3];
while(~scanf("%d %d %d",&a[0],&a[1],&a[2]))
{
if(!(a[0]+a[1]+a[2])) break;
int maxx=0;
for(int i=0;i<3;i++)
{
maxx+=a[i]*b[i];
}
memset(vis,0,sizeof vis); vis[0]=1;
for(int i=0;i<3;i++)
{
for(int j=maxx;j>=0;j--)
{
for(int k=0,num=0;num<=a[i];k+=b[i],num++)
{
if(vis[j]) vis[k+j]=1;
}
}
}
for(int i=1;i<=maxx+1;i++)
{
if(vis[i]==0)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
相關文章
- Ignatius and the Princess II
- HDU 1709 The Balance(母函式)函式
- python簡單例題在哪找Python單例
- LeetCode每日一題:反轉字串中的單詞 III(No.557)LeetCode每日一題字串
- Ignatius and the Princess IV——伊格納提烏斯和四公主
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- 簡單探討sum()函式返回null的問題函式Null
- 力扣之反轉字串中的單詞 III力扣字串
- LeetCode C++ 441. Arranging Coins【Math/Binary Search】簡單LeetCodeC++
- HDU 5795 A Simple Nim (SG函式+打表找規律)函式
- 快取函式的簡單使用快取函式
- 簡單的檔案快取函式快取函式
- python 內建函式簡單總結Python函式
- 簡單探索Python中的filter函式PythonFilter函式
- 簡單介紹JS函式防抖和函式節流JS函式
- python實現簡單猜單詞遊戲Python遊戲
- 簡單歡樂的依賴注入函式依賴注入函式
- 三角函式形成簡單的波浪函式
- 對高階函式的簡單認識函式
- 【leetcode 簡單】第十四題 最後一個單詞的長度LeetCode
- nyoj - 1154. 找食物(簡單BFS)
- 單詞搜尋問題
- match函式簡單介紹以及與index函式結合應用函式Index
- 幾個簡單又實用的PHP函式PHP函式
- Python簡單函式迴圈綜合例項Python函式
- 封裝一個簡單的動畫函式封裝動畫函式
- 小程式的生命週期函式(簡單易懂)函式
- C++ 虛解構函式簡單測試C++函式
- Python-split()函式用法及簡單實現Python函式
- Python3之遞迴函式簡單示例Python遞迴函式
- 簡單介紹python的input,print,eval函式Python函式
- 簡單介紹Python 如何擷取字元函式Python字元函式
- 常見函式之單行函式函式
- [無心插柳]簡單實現常用的表單校驗函式函式
- 『無為則無心』Python函式 — 28、Python函式的簡單應用Python函式
- go練手:簡單的單詞格式轉換工具Go
- HDU_1237 一個簡單的計算器
- java呼叫python簡單函式介面的具體教程JavaPython函式