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;
}
相關文章
- HDU 1028 Ignatius and the Princess III:dp or 母函式函式
- 杭電ACM hdu 1085 Holding Bin-Laden Captive! 解題報告(母函式)ACMAPT函式
- HDU 1028-Ignatius and the Princess III(拆分整數-母函式-無限次)函式
- 杭電ACM hdu 1398 Square Coins 解題報告(母函式)ACM函式
- HDU 2082-找單詞(母函式-有限次)函式
- 杭電ACM hdu 2082 找單詞 解題報告(母函式)ACM函式
- HDOJ-1398 Square Coins(母函式)函式
- HDU 1709 The Balance(母函式)函式
- 杭電ACM hdu 2110 Crisis of HDU 解題報告(母函式)ACM函式
- 杭電ACM hdu 1171 Big Event in HDU 解題報告(母函式)ACM函式
- 杭電ACM hdu 2152 Fruit 解題報告(母函式)ACMUI函式
- python簡單例題在哪找Python單例
- hdu5365 簡單幾何問題
- 簡單的printf函式與scnaf函式函式
- Python函式簡單示例Python函式
- vue tendet函式簡單分享Vue函式
- atoi函式簡單實現函式
- jquery函式$.proxy簡單示例jQuery函式
- 力扣之反轉字串中的單詞 III力扣字串
- 函式表示式和函式宣告簡單介紹函式
- 單詞小卡片 -- 從單詞、例句收集到命令式背單詞
- 杭電ACM hdu 2079 選課時間 解題報告(母函式)ACM函式
- LeetCode每日一題:反轉字串中的單詞 III(No.557)LeetCode每日一題字串
- 簡單探討sum()函式返回null的問題函式Null
- HDU 1241Oil Deposits(簡單搜尋題)
- HDU 4422 The Little Girl who Picks Mushrooms(簡單題)OOM
- 快取函式的簡單使用快取函式
- $.ajax()函式用法簡單例項函式單例
- javascript匿名函式簡單介紹JavaScript函式
- 一些簡單的函式函式
- 函式指標簡單的列子函式指標
- HDU 5795 A Simple Nim (SG函式+打表找規律)函式
- hdu 2072 Java 單詞數(超級坑) HDU 2072Java
- 簡單的檔案快取函式快取函式
- javascript call()函式用法簡單介紹JavaScript函式
- javascript trim()函式用法簡單介紹JavaScript函式
- getFullYear()函式用法簡單介紹函式
- document.close()函式簡單介紹函式