1303:鸣人的影分身

鸣人的影分身

数据不大,深搜也能过得去。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int ans,k;
 5 void dfs(int b,int s,int d){
 6     if(d==k){
 7         if(!b)ans++;
 8         return;
 9     }
10     for(int i=s;i<=b;i++){
11         dfs(b-i,i,d+1);
12     }
13 }
14 int main(){
15     int n,m;
16     cin>>n;
17     while(n--){
18         cin>>m>>k;
19         dfs(m,0,0);
20         cout<<ans<<endl;
21         ans=0;
22     }
23     return 0;
24 }

dp解法(相关解释在代码里有进行说明)

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=12;
 5 int f[N][N][N];
 6 
 7 int main(){
 8     int t,m,n;
 9     cin>>t;
10     while(t--){
11         cin>>m>>n;
12         //初始化
13         memset(f,0,sizeof(f));
14         for(int i=0;i<=m;i++)f[1][i][i]=1;
15         //f[i][j][k]表示第i个人分配j查克拉,前i个人共分配k查克拉
16         for(int i=2;i<=n;i++){
17             for(int j=0;j<=m;j++){
18                 for(int k=j;k<=m;k++){
19                     for(int l=j;l>=0;l--){//第i-1个人分配多少查克拉
20                         f[i][j][k]+=f[i-1][l][k-j];
21                     }
22                 }
23             }
24         }
25         int ans=0;
26         for(int i=m/n;i<=m;i++)
27             ans+=f[n][i][m];
28         cout<<ans<<endl;
29     }
30     return 0;
31 }

 

posted @ 2021-08-23 11:00  Rekord  阅读(405)  评论(0编辑  收藏  举报