今天没看出来从而被BS了的DP题。。。。

#include <stdio.h>
#include 
<string.h>

int a[101],b[101],c[101];
int f[512][512];
int n,m;



void DP()
{
    
int i, j, k;
    
for(k=0;k<n;k++)
    
{
        
for(i=0;i<=m;i++)
            
for(j=0;j<=m;j++)
            
{
                
if(f[i][j]==1)
                
{
                    
int use=0;
                    
while(use<=c[k])
                    
{
                        
if(a[k]*use + i > m || b[k]*use + j > m)
                            
break;
                        
if(f[a[k]*use + i][b[k]*use + j]==0)
                            f[a[k]
*use + i][b[k]*use + j]=2;
                        use
++;
                    }

                }

            }

        
for(i=0;i<=m;i++)
            
for(j=0;j<=m;j++)
                
if(f[i][j]==2)
                    f[i][j]
=1;
    }

}



int main()
{
    
int t;
    scanf(
"%d",&t);
    
while(t--)
    
{
        memset(f,
0,sizeof(f));
        f[
0][0]=1;
        scanf(
"%d%d",&n,&m);
        
int i, j;
        
for(i=0;i<n;i++)
        
{
            scanf(
"%d%d%d",&a[i],&b[i],&c[i]);
        }

        DP();


        
int count=0;
        
for(i=0;i<=m;i++)
            
for(j=0;j<=m;j++)
                
if(f[i][j]==1)
                    count
++;

        printf(
"%d\n",count);
    }

    
return 0;
}
原文地址:https://www.cnblogs.com/SQL/p/900606.html