多重部分和问题
1 #include<cstdio>
2 #include<iostream>
3 #include<algorithm>
4 #include<queue>
5 #include<map>
6 #include<vector>
7 #include<set>
8 #include<string>
9 #include<cmath>
10 #include<cstring>
11 using namespace std;
12 int a[100000+10];
13 int m[100000+10];
14 int K,n;
15 int dp[100000+10];
16 void solve()
17 {
18 memset(dp,-1,sizeof(dp));
19 dp[0]=0;
20 for(int i=0;i<n;i++)
21 {
22 printf("i=%d\n",i);
23 for(int j=0;j<=K;j++)
24 {
25 if(dp[j]>=0)//已经拼好了说明ai可以剩下mi个
26 dp[j]=m[i];
27 else if(j<a[i]||dp[j-a[i]]<=0)//j<a[i]说明ai比k大,没办法拼,-1
28 //dp[j-ai]如果不可分或者=0下面就不能-1
29 dp[j]=-1;
30 else//如果dp[j-ai]可以分,那么dp[j]=dp[j-ai]-1;
31 dp[j]=dp[j-a[i]]-1;
32 // printf(" dp[%d]=%d\n",j,dp[j]);
33 }
34 }
35 if(dp[K]>=0)
36 printf("Yes\n");
37 else
38 printf("No\n");
39 }
40 int main()
41 {
42 //n=3
43 //a=3 5 8
44 //m=3 2 2
45 //k=17
46 scanf("%d",&n);
47 for(int i=0;i<n;i++)
48 scanf("%d",&a[i]);
49 for(int i=0;i<n;i++)
50 scanf("%d",&m[i]);
51 scanf("%d",&K);
52 solve();
53 return 0;
54 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2019-02-09 UVA 136 Ugly Numbers